Flexのセキュリティ問題(APSB11-25)対象商品
内容(What's covered)
問題
Flex SDKの脆弱性により、多くのFlexで構築されたアプリケーションは、クロスサイトスクリプティング(XSS)攻撃に対して脆弱です。アプリケーションにパッチを適用してユーザーのデータを保護する必要があります。
どのアプリケーションが脆弱ですか?
- Flex 3.xのリリースを使用するすべてのWeb ベースの(AIR ベースではない)Flexアプリケーションビルドは脆弱です。(これらのバージョンには 3.0、3.0.1、3.1、3.2、3.3、3.4、3.4.1、3.5、3.5A、3.6が含まれます)。
- RSL(ランタイム共有ライブラリ)リンケージではなく、Flexライブラリの静的リンケージを使用してコンパイルされたFlex 4.xのリリースを使用して構築するWebベースのFlexアプリケーションは、脆弱です。(影響を受けるバージョンには、4.0、4.1、4.5、4.5.1が含まれます)。ただし、脆弱でない埋め込みフォントを使用している場合もあります。 AIRベースのアプリケーションは脆弱ではありません。
- デフォルトの方法でコンパイルされたFlex 4.xで作成されたほとんどのアプリケーション(特に、RSLリンケージを使用するもの)は脆弱ではありません。ただし、まれに脆弱な場合があります。
- 3.0よりも前のFlexのリリースを使用して作成されたアプリケーションは脆弱ではありません。
- AIRベースの(Webベースではない)Flexで作成されたアプリケーションは脆弱ではありません。
- Flexを使用しないで作成されたSWFファイル(Adobe Flash Professionalで作成されたファイルなど)は脆弱ではありません。
アプリケーションが脆弱かどうかを確認するには
SWFファイルが脆弱かどうかを確認するには、以下の「解決方法」の「対策I」に記載されている手順に従ってください。
解決方法
ここでは、ユーザーを保護するために実行できる2つの対策について説明します。 対策IIを実行すれば、対策Iを実行しなくても十分な効果があるため、対策IIの実行をお勧めします。 ただし、対策IIを完了するのにかなりの時間がかかる場合は、当面の解決方法として対策 I を実行してください。次に、時間が許す限り対策IIを実行してください。
対策I : アプリケーションの修復
脆弱なアプリケーションを修復して再展開してください。アプリケーションを確実に修復するには、次に説明する対策IIの手順に従ってください。ただし、より速く簡単にアプリケーションのSWFファイルを修復する場合は、提供されたSWFパッチツール(APSB11_25_Patch_Tool.air)をアプリケーションのSWFファイルで実行します。このパッチの適用以外はまったく同じSWFファイルが作成されます。次に新しいファイルで入れ替えを行って、配置Webサイトの元のSWFファイルを置き換えます。
ただし、その後ソースコードからアプリケーションを再構築した場合は、SDKを修正済みバージョンにアップデートしない限り、依然として脆弱です。(この手順は対策IIで説明しています)。また、SWFパッチツールは、SWFファイルの特定領域で既知のバイトシーケンスを検索することにより機能します。アドビの公式Flexコンパイラー以外のコンパイラー、オプティマイザーまたはオブファスケーターを使用して構築または後処理されたSWFファイルは、脆弱である可能性があります。(ツールが脆弱性はないとレポートしても、脆弱である可能性があります)。独自のコンパイラーまたはポストプロセッサーを使用している場合は、SWFパッチツールを使用しないで、対策IIにスキップしてください。
SWFパッチツールはWindowsおよびMacOS Xでのみサポートされています。Linuxシステムでは使用しないでください。WindowsまたはMacOS Xシステムを使用できない場合は、SWFパッチツールを使用しないで対策IIにスキップしてください。
SWFパッチツールを使用するには、次のことを行います :
- Adobe AIRランタイムがインストールされていることを確認します。インストールされていない場合は、http://get.adobe.com/jp/air/からダウンロードしてインストールします。
- このドキュメントの最下部近くの「Flexアプリケーションパッチツールアップデート使用許諾契約」に記載されている使用許諾条件を読み、条項に同意する場合は、SWFパッチツール、 APSB11_25_Patch_Tool.airをダウンロードしてインストールします。 ダウンロード時に、ブラウザーによってはファイル名の拡張子を.airから.zipに変更する場合があります。そのため、ファイルを.air拡張子で保存するかファイル名を変更していることを確認してください。
- SWFファイルのバックアップコピーを作成して「original.swf」などの名前を付けます。
- パッチツールを実行します。
- 「参照」ボタンをクリックし、パッチを適用するSWFファイルを選択します。SWFファイルの読み込み、修正および書き込みが行なわれ、既存のSWFファイルが上書きされます。ファイルをバックアップしていること、ファイルへの書き込み権限を持っていることを確認してください。 パッチツールによって、選択したSWFファイルと同じディレクトリにログファイルが書き込まれます。ログファイルの名前はSWFファイルと同じ名前に.logが付加されたものになります (例 : mySWF.swf.log)。
- オプション : 実際にパッチを適用しないでSWFファイルが脆弱なのかどうかを確認するには、「チェック」ボタンをクリックします。結果の出力を大きな白いテキスト領域で確認します。SWFファイルのサイズによっては、チェックに多少時間がかかる場合があります。
- 「パッチ」をクリックし、パッチが完了するまで待ちます。SWFファイルのサイズによっては、パッチに多少時間がかかる場合があります(SWFファイルが脆弱ではない場合に「パッチ」ボタンをクリックしても問題はないので、前述のオプションのチェック手順をスキップしてもかまいません)。
- 大きな白いテキスト領域に表示される出力を確認します。 SWFへのパッチの適用が成功した場合、出力はこのようになります。
Opening C:\mySWF.swf...
Analyzing C:\mySWF.swf...
Analyzing potentially vulnerable area...
Patch applied in memory.
Writing patched SWF to C:\mySWF.swf.
Success: C:\mySWF.swf patched! - パッチの適用が成功したら、パッチが適用されたSWFファイルを配置Webサイトの元のSWFファイルと交換します。
次の表にパッチツールで表示される可能性があるその他の出力メッセージを示します :
「SWFはFlexアプリケーションSWFではありません」 |
Flexで構築したすべてのアプリケーションのSWFファイルに必要な重要な要素が見つからなかったことを示します。選択したSWFファイルがFlexで構築したアプリケーションのSWFファイルであることを確認します。 |
| 「分析が完了しました。脆弱性は見つかりませんでした」 | SWFファイルはFlex SWFファイルではないことを示します。 |
| 「脆弱性は見つかりませんでした」 | SWFファイルはFlex SWFである可能性がありますが、脆弱性を含んでいないことを示します。 |
| 「SWFはモジュールSWFです。脆弱ではありません」 | SWFファイルはアプリケーションではなく、Flexモジュールである可能性があることを示します。モジュールにパッチを適用する必要はありません。 |
| 「失敗:脆弱性が見つかりましたが、<filename>にパッチを適用できません。パッチ適用済みのSDKを使用してSWFを再構築してください」 | SWFファイルは、RSLが読み込んで、脆弱性を判断するのと同じ方法で設定されていることを示します。このため、SWFパッチツールはこれにパッチを適用できません(RSLを使用するFlex 4 SWFですが、ロケールを含んでいないというまれな状況が原因)。以下の対策IIの説明に従って修正済みSDKバージョンにアップデートした後でソースファイルからアプリケーションを再構築します。 修正済みSDKバージョンにアップデートした後も、ツールはこの同じメッセージのレポートを続行します。ただし、SWFファイルがRSLに依存している限り、修正済みSDKバージョンから攻撃されることはありません。 |
| 「失敗:SWFへの書き込み中のエラー」 | SWFファイルは脆弱ですが、ディスク上のSWFファイルに変更を書き込んでいるときにエラーが発生したためパッチを適用できなかったことを示します。ファイルへの書き込み権限があることを再度確認してください。 |
| 「フレーム2のABCブロックに脆弱性は見つかりませんでした。SWFに既にパッチが適用されている可能性があります」 | 通常、SWFファイルに既にパッチが適用されていることを示します。 |
| 「フレーム2のABCブロックに脆弱性は見つかりませんでした」 | SWFファイルはFlex SWFファイルである可能性がありますが、脆弱なコードを含んでいないことを示します。 |
Flexコマンドラインツールに精通していて、ツールを実行するように設定する場合は、次の手順も実行できます。(Flexコマンドラインツールの設定と使用についての詳細は、opensource.adobe.com/wiki/display/flexsdk/Setup を参照してください)。 これらの手順を行うことで、SWFファイルに加えた変更を調べることができます。
- Flexコマンドシェルを開きます。アプリケーションのバックアップコピーに「original.swf」という名前を付けたと仮定して、コマンド「SWFDump -abc original.swf > originalSWFDump.txt」を実行します。SWFDumpコマンドはsdk/binディレクトリにあります。
- 「SWFDump -abc mySWF.swf > mySWFDump.txt」を使用して、修正済み SWF ファイルに対してSWFDumpを同様に実行します。
- テキスト比較ツールを使用して、originalSWFDump.txtとmySWFDump.txtを比較し、修正されたバイトのみがModuleInfo::load()メソッドに含まれていることを確認します。約80~90行の出力があり、次が変更の前に表示されます。
function private:ModuleInfo:::load(flash.system:ApplicationDomain, flash.system:SecurityDomain, flash.utils:ByteArray)::void maxStack:3 localCount:6 initScopeDepth:5 maxScopeDepth:6
対策II:パッチ適用済みSDKへのアップグレードと再構築
以前にダウンロードまたはインストールしたFlex SDKのコピーに脆弱性が含まれている場合は、パッチ適用済みSDKにすべて置き換えることをお勧めします。
Flexプロジェクトへの影響を最小限に抑えるため、アドビではさまざまな修正済みバージョンのFlex SDKをリリースしています。脆弱性がある各バージョンのSDKを、修正を除けばほぼ同一の修正済みバージョンに置き換えることができます。
SDKのバージョンを確認するには、SDKのルートフォルダーを参照します。(通常、このフォルダーはAdobe Flash BuilderまたはAdobe Flex Builderのフォルダーにある「sdks」フォルダー内にあります)。テキストエディターでflex-sdk-description.xmlファイルを開き、「name」タグを参照します。次に、以下の表を参照して、脆弱性のある各バージョンを置き換える場合に使用する修正済みバージョンのFlex SDKを確認してください。
| インストールされているFlex SDKバージョン... | 置き換えに使用する修正済みバージョン... |
| 3.0 | 3.0A |
| 3.0.1 | 3.0.1A |
| 3.1 | 3.1A |
| 3.2 | 3.2A |
| 3.3 | 3.3A |
| 3.4 | 3.4A |
| 3.4.1 | 3.4.1A |
| 3.5または3.5A | 3.5B |
| 3.6 | 3.6A |
| 4.0 | 4.0A |
| 4.1 | 4.1A |
| 4.5 | 4.5A |
| 4.5.1 | 4.5.1A |
または、下位バージョンのSDKから上の表の右側に記載されている上位バージョンのSDKにアップグレードすることもできます。またはリリースされたばかりのFlex SDK 4.6(脆弱性を含まないバージョン)にアップデートできます。ただし、上位バージョンのSDKに移行すると、プロジェクトの移行に関する別の問題が発生する場合があります。
さらに、リリースされたばかりのFlash Builder 4.6をインストールすると、脆弱性を含まないFlex SDK(具体的に、Flex SDK 3.6AおよびFlex SDK 4.6)がインストールされます。Flash Builder 4.6とは別に他のSDKバージョンがインストールされている場合は、それらのバージョンを削除するか、修正済みバージョンに置き換えます。
重要:SDKの既存のコピーに含まれるいずれかのファイルに変更を加えた場合は、変更したファイルのバックアップを作成します。次に、古いSDKを新しいSDKに置き換えた後で新しいSDKに変更を再度適用します。frameworks\flex-config.xmlなど、変更を加えた可能性がある設定ファイルについても考慮してください。
重要:Adobe Flash Builder (Adob Flex Builder)のユーザーは、さらにいくつかの予防措置を行なう必要があります。 SDKを置き換える前に、すべてのFlash Builderプロジェクトフォルダーを必ずバックアップしてください。さらに、ライブラリのリンク方法の変更(デフォルトまたはランタイム共有ライブラリ、または「コードにマージ」)、またはHTMLテンプレートの変更など、Flash Builderプロジェクトをカスタマイズしている場合はそれを書き留めます。次に、修正済みSDKへの切り替え後にカスタマイズが依然として適用されていること、または再度適用されていることが確認できます。 (SDKの置き換え後ではなく置き換え前に、そういったカスタマイズを確認してメモを取るのが最も安全です)。修正済みSDKをローカルマシンにダウンロードしたら、脆弱なSDKの登録を解除(「アンインストール」)し、新しいSDKをFlash Builderに登録(「インストール」)します。Flash Builder(またはFlex Builder)のバージョンによって手順が多少異なる場合があります。ただし、最新のバージョンでは、「ウィンドウ」メニュー (Windows) または「Flash Builder」メニュー (Mac OS) の「環境設定」を選択します。次に、ダイアログの左側にある「Flash Builder」ノードを展開して、その下の「インストールされている Flex SDK」ノードを選択します。 「削除」および「追加」ボタンを使用して登録済みのSDKを変更します。次に、デフォルトのSDKとして使用する新しいSDKのチェックボックスをチェックして、「OK」をクリックします。 すべてのプロジェクトで新しいデフォルトのSDKが使用されます(古いSDKをすべて削除した場合)。個別のプロジェクトが使用する(デフォルトではない)SDKを更新するには、Package Explorerのプロジェクトのルートノードを選択します。次に、「ファイル」メニューの「プロパティ」を選択し、ダイアログの左側にある「Flex (...)コンパイラー」ノードを選択します。最後に、「特定のSDKを使用」を選択し、ポップアップメニューから使用するSDKを選択し、「OK」をクリックします。この時点で、以前に書き留めた必要なプロジェクトカスタマイズを再度適用します。
重要 : データ可視化コンポーネント(Charts、Advanc dDataGrid、およびOLAPDataGridなど)、または自動テストサポートのある3.x SDKがある場合は、それらのファイルを既存のSDKから対応する修正済みSDKに手動でコピーする必要があります。 これらのファイルはFlexオープンソースサイトで入手可能な標準3.x SDKの一部ではありません。通常、これらのファイルはFlex Builder 3.xまたはFlash Builder 4.xのインストーラーによって3.x SDKに追加されるか、または手動で追加されている可能があります。 これらのファイルをコピーする前に、コピー先のSDKに元のSDKと同じ(ただし、「A」という接頭辞が付いている)バージョン番号があることを確認します。 それらが同じである場合は、次のファイル(存在する場合)を既存の3.x SDKから対応する修正済みSDKにコピーします。
データ可視化ファイル:
- frameworks\dmv_automation_build.xml
- frameworks\libs\datavisualization.swc
- frameworks\locale\<locale>\datavisualization_rb.swc
- frameworks\projects\datavisualization\*
- frameworks\rsls\datavisualization_3.x.x.x.swf
- frameworks\rsls\datavisualization_3.x.x.x.swz
- lib\DMV-source.jar
- オプションファイル:
- samples\explorer\charts_explorer.xml
- samples\explorer\charts\*
- samples\explorer\controls\AdvancedDataGridExample.mxml
- samples\explorer\controls\OLAPDataGridExample.mxml
- samples\explorer\printing\AdvancedPrintDataGridExample.mxml
- samples_ja\explorer\charts_explorer.xml
- samples_ja\explorer\charts\*
- samples_ja\explorer\controls\AdvancedDataGridExample.mxml
- samples_ja\explorer\controls\OLAPDataGridExample.mxml
- samples_ja\explorer\printing\AdvancedPrintDataGridExample.mxml
自動化ファイル:
- frameworks\automation_build.xml
- frameworks\libs\automation.swc
- frameworks\libs\automation_agent.swc
- frameworks\libs\automation_dmv.swc
- frameworks\libs\automation_flashflexkit.swc
- frameworks\libs\qtp.swc
- frameworks\locale\<locale>\automation_agent_rb.swc
- frameworks\locale\<locale>\automation_rb.swc
- frameworks\projects\automation\*
- frameworks\projects\automation_dmv\*
- frameworks\projects\automation_flashflexkit\*
- templates\automation-runtimeloading-files\*
Flex SDKの脆弱コピーを修正済みバージョンに置き換えたら、すべてのFlexアプリケーションをFlexを使用して再構築する必要があります。(念のため、Flexライブラリも同様に再構築します。)脆弱なSWFファイルは、新しい脆弱でないファイルと置き換えられます。最後に、前述の対策Iの一部としてパッチ適用済みバージョンのSWFファイルをまだ再配置していない場合は、アプリケーションを再配置します。これに付随するSWFファイルまたはSWZライブラリファイルも再配置します。
セキュリティフィックスがアプリケーションを壊す可能性はありますか?
ほとんどのアプリケーションはフィックスから悪影響を受けることはありません。アプリケーションでModuleLoaderを使用して別のドメインからモジュールをロードしている場合、またはModuleManagerを使用して別のドメインからモジュールをロードし、IModuleInfo.load()メソッドでSecurityDomainを指定していない場合、それらのモジュールはロードされません。
この問題を解決するには、修正済みSDKを使用してtrustContentパラメーターをModuleLoaderで指定します。または、IModuleInfo.load()の呼び出しでSecurityDomain.currentDomainを指定します。
Flexアプリケーションパッチツール使用許諾契約
By downloading, installing or using the APSB11_25_Patch_Tool.air for Flex SDK (the “Software”) provided to you by or on behalf of Adobe Systems Incorporated or its subsidiaries (“Adobe”); you agree to the following terms and conditions. If you do not agree with such terms and conditions; do not use the Software. The terms of an end user license agreement accompanying a particular Software file upon installation or download of the Software shall supersede the terms presented below.
This Software is designed exclusively for use with Flex SDK. Adobe grants you a non-exclusive license to use such Software with the Flex SDK only, provided you possess a valid license from Adobe for Flex SDK. Except as set forth below, such Software is licensed to you subject to the terms and conditions of the End User License Agreement from Adobe governing your use of the Flex SDK, which can be found at http://www.adobe.com/jp/products/eulas/.
You acknowledge that the Software is subject to the U.S. Export Administration Regulations (the “EAR”) and that you will comply with the EAR. You will not export or re-export the Software directly or indirectly, to: (1) any countries that are subject to U.S. export restrictions (including, but not limited to, Cuba, Iran, North Korea, Sudan, and Syria); (2) any end user who you know or have reason to know will utilize them in the design, development or production of nuclear, chemical or biological weapons, or rocket systems, space launch vehicles, and sounding rockets, or unmanned air vehicle systems; or (3) any end user who has been prohibited from participating in the U.S. export transactions by any federal agency of the US government. In addition, You are responsible for complying with any local laws in your jurisdiction which may impact your right to import, export or use the Software. If Adobe has knowledge that a violation has occurred, Adobe may terminate your license.
DISCLAIMER OF WARRANTIES: YOU AGREE THAT ADOBE HAS MADE NO EXPRESS WARRANTIES TO YOU REGARDING THE SOFTWARE AND THAT THE SOFTWARE IS BEING PROVIDED TO YOU “AS IS” WITHOUT WARRANTY OF ANY KIND. ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THE SOFTWARE; EXPRESS OR IMPLIED; INCLUDING; WITHOUT LIMITATION; ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE; MERCHANTABILITY; MERCHANTABLE QUALITY OR NONINFRINGEMENT OF THIRD PARTY RIGHTS. Some states or jurisdictions do not allow the exclusion of implied warranties; so the above limitations may not apply to you.
LIMIT OF LIABILITY: IN NO EVENT WILL ADOBE BE LIABLE TO YOU FOR ANY LOSS OF USE; INTERRUPTION OF BUSINESS; OR ANY DIRECT; INDIRECT; SPECIAL; INCIDENTAL; OR CONSEQUENTIAL DAMAGES OF ANY KIND (INCLUDING LOST PROFITS) REGARDLESS OF THE FORM OF ACTION WHETHER IN CONTRACT; TORT (INCLUDING NEGLIGENCE); STRICT PRODUCT LIABILITY OR OTHERWISE; EVEN IF ADOBE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Some states or jurisdictions do not allow the exclusion or limitation of incidental or consequential damages; so the above limitation or exclusion may not apply to you.
FlexApplicationPatchToolEULA-en_US-09012011_0305
ドキュメントID
(cpsid_91544)
最終更新日
2011-12-13
対象製品
