Active Scripting もしくはActiveX を用いずに任意のコマンドを実行する
◆概要:
The Pull 氏は2002年1月10日のアドバイザリーで、HTMLの<object>要素にある古いバグ(最初にDildog 氏が発見)を使って任意のコマンドを実行することが今なお可能な方法を指摘した。The Pull 氏の発見は興味深いものであるが、彼が再び発見したバグの解
国際
海外情報
The Pull 氏は2002年1月10日のアドバイザリーで、HTMLの<object>要素にある古いバグ(最初にDildog 氏が発見)を使って任意のコマンドを実行することが今なお可能な方法を指摘した。The Pull 氏の発見は興味深いものであるが、彼が再び発見したバグの解析は間違っていた。問題は Popup オブジェクトにあるのではなく、文書内のどこにでも動的に挿入されるHTML フラグメントに関連するものだ。
“createPopup”が実行する全てのことは、空のHTML文書を含む(特別な機能のない)ウィンドウの生成であり、安全性を脅かすものではない。しかし、後に(innerHTMLを用いて)その文書にHTMLが挿入された場合、現実の問題となる。
例えば、以下のコードは同じように機能するだろう:
<span id="oSpan"></span>
<script language="jscript" defer>
oSpan.innerHTML='<object classid="clsid:11111111-1111-1111-1111-111111111111" codebase="c:/winnt/system32/calc.exe"></object>';
</script>
(注記:innerHTMLは、全ての要素に動的にHTMLを挿入するために使用される他、outerHTML、insertAdjacentHTMLの使用も可能にし、しかも同じ結果を取得する。)
◆詳細:
影響を受けるアプリケーション:
Web Browser コントロール(5.5以上)をホストする全てのアプリケーションが影響を受ける。理由は、この脆弱性がActive ScriptingもしくはActiveX を必要としないからだ。影響を受けるアプリケーションの一部は、以下の通りだ。
* Microsoft Internet Explorer
* Microsoft Outlook
* Microsoft Outlook Express
脆弱であることを確認した環境:
* IE5.5 sp2とWin98の全パッチを適用し、Active Scripting とActiveX を無効に設定。
* IE5.5 sp2とNT4 sp6aの全パッチを適用し、Active Scripting とActiveXを無効に設定。
* IE6 sp1とWin2000 sp2の全パッチを適用し、Active Scripting とActiveXを無効に設定。
* IE6 sp1とWinXPの全パッチを適用し、Active Scripting とActiveX を無効に設定。
問題の原因を特定したので、Active Scriptingを使用せずにHTMLを動的に挿入する方法を探すことができる。そして、Active Scripting やActiveX を無効にしたMicrosoft Outlook もしくはInternet Explorer などの“保護された”環境下においてもこのバグを使用することができる。
IE4 のエキサイティングな機能の一つにData Binding がある。開発者はその機能を使って、プレゼンテーション層からアプリケーション・データを完全に分離することができる。Data Binding のデータ・ソース(DSO)は何でもよい。つまり、(TDC の)CSV ファイル、HTML、XMLなどその他の多くのデータ形式に対応している。Data Binding は一行のスクリプト・コードも使わずに、div もしくはspan のようなHTML 要素(データ・コンシューマ)をDSO に結びつける。
“dataFormatAs”属性がそのコンシューマ側で“HTML”に設定されている時、Data Binding は内部でinnerHTML を使用して、そのデータをHTML 要素に挿入する(そうでない場合は、innerTextを使用する)。
我々がしなければならない全ての事は、目障りな<object>要素を含むDSO を供給することだ。そして、Data Binding エンジンがスクリプティングを用いずに残りを処理するだろう。
◆攻略手段:
下記の例で、我々はDSO として独立したXML データ、そしてデータ・コンシューマとしてspan 要素を使用している。XML の使用は、ホスト・アプリケーションにより停止される可能性のある外部要求を必要とせずに、文書内にXML を埋め込むことが可能なので特に快適だ。
<span datasrc="#oExec" datafld="exploit" dataformatas="html"></span><xml id="oExec">
<security>
<exploit>
<![CDATA[
<object id="oFile"
classid="clsid:11111111-1111-1111-1111-111111111111"
codebase="c:/winnt/system32/calc.exe"></object>
]]>
</exploit>
</security>
</xml>
◆解決策:
このバグに対し構成を微調整する対応策はない。このバグはブラウザがHTMLを解析している限り、機能するだろう。唯一の解決策は、Microsoft 社がパッチを配布することだ。
◆実証:
GreyMagic Software 社は、二つの機能検証の実例を提出した。
* 単純: "c:/winnt/system32/calc.exe" の実行を試みる。
* 高度: ユーザが実行したいと思うプログラムをユーザに選択させる。
それらは共に、下記のURLに掲載されている。
http://security.greymagic.com/adv/gm001-ie/
追加情報
GreyMagic Software 社がこの情報を提供した。
[翻訳:関谷 麻美]
[情報提供:SecuriTeam]
http://www.securiteam.com/
《ScanNetSecurity》