Adobe は、2015年6月23日(米国時間)、同社 Flash Player に存在するゼロデイ脆弱性「CVE-2015-3113」に対する修正プログラムを定例外のセキュリティ情報「APSB15-14」で公開。トレンドマイクロはすでに本ブログ上で報告しました。この更新により、Adobe Flash Player の最新バージョンは「18.0.0.194」となっています。
弊社が今回の脆弱性を解析したところ、「CVE-2015-3113」の根本原因は「CVE-2015-3043」と類似していることが明らかになりました。いずれの脆弱性も、Flash Player のコード内でバッファオーバーフローを起こします。実際、「CVE-2015-3043」を利用した攻撃で利用されたコードも、バージョン「18.0.0.160」で PC を機能停止させることが可能です。なお、「18.0.0.160」は、今回の緊急更新プログラムが公開される直前のバージョンです。
この 2つの脆弱性利用を突く不正な Flashファイルが埋め込まれた Webサイトにユーザが訪れた場合、攻撃者は PC上で任意のコード(不正プログラムなど)を実行することが可能になります。不正な Flashファイルを埋め込んだ不正な Webサイト、もしくは改ざんされたWebサイトで、修正プログラムが適用されていない古いバージョンの Flash Player を使用していた場合、アクセスしたユーザは危険にさらされます。
■脆弱性「CVE-2015-3113」と「CVE-2015-3043」の比較
「CVE-2015-3113」と「CVE-2015-3043」は、いずれも Adobe Flash Player が対応している動画ファイルフォーマット「FLV」の構文解析の手順に存在するヒープオーバフローの脆弱性です。いずれの脆弱性も、Flash Player の音声コーデック「Nellymoser」の音声処理方法に存在し、FLVファイルの audioタグが変更されることにより攻撃される恐れがあります。どちらの脆弱性も、バッファ長 0x2000 でハードコード化された長さを持つヒープバッファをオーバフローさせます。
「CVE-2015-3043」と「CVE-2015-3113」は、いずれも「sample_count * sample_size > 0x2000」を利用して脆弱性を攻撃し、バッファ長の確認を回避します。
■「CVE-2015-3043」の以前の修正プログラム
「CVE-2015-3041」は「17.0.0.169」で最初に修正されました。この修正プログラムにより、FLV の audioタグから取得されたサンプル数が制限されました。
図1:元の修正プログラム
図1 では、サンプル数が「0x400」に制限されているのがわかります。ここから必要なバッファの最大サイズを算出することができます。FLV は1サンプルごとに最大サイズとして「4」を指定します。「Nellymoser」は、図2 で示すようにハードコード化された 2の倍数のサイズを持ちます。つまり、必要な最大バッファは「0x400 * 4 *2 = 0x2000」となります。
図2:2倍する「Nellymoser」
■「18.0.0.160」への新しい修正プログラム
しかし、「18.0.0.160」で、このコードは大きく変更されました。図3 はそのコードです。
図3:「18.0.0.160」の修正プログラム
関数「GetSampleCount」は必要な最終のバッファサイズを確認します。最終のバッファサイズが「0x2000」より大きい場合、「0x2000」に制限します。しかし、Nellymoser のデコード関数のハードコード化された2倍にする作業を無視します。そのため、再びヒープバッファオーバフローの攻撃に利用されるようになりました。
■トレンドマイクロの対策
上記の解析により、以前の Flash Player のゼロデイ脆弱性と今回の脆弱性は、同様の根本原因から生じていることが明らかになりました。実際、以前のゼロデイ脆弱性で利用されたコードも、「18.0.0.160」で機能停止させることができるでしょう。
今回の事例は、修正済みの脆弱性が後に再度攻撃されないために、いかに慎重な修正プログラムの作成が重要であるかを浮き彫りにしました。古い脆弱性がソフトウェアの新しいバージョンによって危険にさらされることがないことを確認するために、回帰テストはソフトウェア開発の一部にすべきでしょう。
トレンドマイクロのサーバ向け総合セキュリティ製品「Trend Micro Deep Security(トレンドマイクロ ディープセキュリティ)」および「Trend Micro 脆弱性対策オプション(ウイルスバスター コーポレートエディション プラグイン製品)」をご利用のお客様は、以下のフィルタを適用することにより、問題のゼロデイ脆弱性を利用した攻撃から保護されます。
- 1006810 – Adobe Flash Player Heap Buffer Overflow Vulnerability(CVE-2015-3113)
参考記事:
- 「 New Adobe Zero-Day Shares Same Root Cause as Older Flaws」
by Peter Pi (Threat Analyst)
翻訳:品川 暁子(Core Technology Marketing, TrendLabs)