CVE-2010-0027 の実証コードを実行する

2010 年 2 月の Microsoft 月例パッチの MS10-007 で修正された CVE-2010-0027 の実証コード(Proof of Concept:PoC)が発見者 Lostmon Lords氏のブログで公開されました(こちら)。2010 年 2 月の月例パッチを確認したとき、この脆弱性が悪用される可能性が高いんじゃない?と考えました。URI の入力検証が不十分であるため、バイナリ実行が可能であるということから、MS06-014(いわゆる MDAC の脆弱性)や CVE-2008-5353JRE脆弱性)を連想したからです。
実際に実証コードを実行した場合、ブラウザがどのような挙動になるのか確認しました。

結論

初期設定の Internet Explorer 8(IE8)で実証コードを実行しただけでは、いきなりバイナリが実行されませんでした。ただし Internet Explorer の設定やバイナリ次第で、いきなりバイナリが実行される可能性はあります。

実証環境を準備する

Lostmon Lords氏が公開している実証コードの一つ(ここの PoC one)を使用します。この実証コードは calc.exe のパスが間違っていたため、そのパスを修正した以下のコードを Web サーバの公開ディレクトリに保存しました。この実証コードを Windows XP SP3 の IE8*1 で実行します。

<html>
<iframe id="myIframe"
src="handler:handler#:../../../C:\windows/system32/calc.exe">
</html>

なお、CVE-2010-0027 の脆弱性について、IE に影響のある箇所は MS10-007 ではなく、MS10-002 ですでに修正されていたようです。MS10-007 では API を修正することで根本的な解決をおこない、MS10-002 では IE の該当コードを修正することで暫定的な対策をおこなったということでしょう。実証コードを実行する場合、MS10-002, MS10-007 を適用していない環境を使用してください。

実証コードを実行する

実証コードを閲覧すると、IE8 が calc.exe のダウンロードを阻害しました(以下の画像を参照)。ここでダウンロードを許可します。

ダウンロードを許可すると、calc.exe を実行するか、保存するかを選択するダイアログウインドウが表示されます(以下の画像を参照)。ここで [実行] を選択します。

[実行] を選択すると、calc.exe の発行元を確認できないとのダイアログが表示されます(以下の画像を参照)。ここで [実行する] を選択します。

[実行する] を選択すると、ようやく calc.exe が実行されました(以下の画像を参照)。

*1:IE8 は初期設定のまま。普段使用しないので。