XMLHttpRequestオブジェクトを使ったTRACEメソッド送信のブラウザ対応状況を確認してみる
HTTPのTRACEメソッドを悪用する古い攻撃手法に「Cross Site Tracing(XST)」というものがあります。この攻撃手法を悪用すると、第三者が Cross Site Scripting(XSS)の脆弱性が存在するWeb サイトとブラウザの間でやり取りされる HTTP リクエスト・ヘッダを取得できてしまいます。この手法は一般的に HTTP リクエスト・ヘッダに含まれる Authorization ヘッダや Cookie ヘッダを奪取するために悪用されるようですね。
XST では一般的に JavaScript でXMLHttpRequest オブジェクトを悪用するようですが、最新のブラウザでも XMLHttpRequest オブジェクトで TRACE メソッドの HTTP リクエストを送信できるのでしょうか。というのも、W3C の XMLHttpRequest オブジェクトに関する Working Draft*1 では、「TRACEメソッドであった場合、セキュリティ例外を発生させ、処理を中止すべき(should)である」*2との記述があります。このことから、現状のブラウザでは XMLHttpRequest オブジェクトを使って TRACE メソッドを送れないのでは?と考えました。そこで、最新の主要 5 ブラウザ(Internet Explorer, Mozilla Firefox, Opera, Safari for Windows, Google Chrome)で XMLHttpRequest オブジェクトを使った TRACE メソッドの HTTP リクエストを送信できるか確認してみました。
結論
主要 5 ブラウザでは、XMLHttpRequest オブジェクトを使った TRACE メソッドの HTTP リクエストを送信できませんでした(この日記執筆時点)。少なくとも JavaScript + XMLHttpRequest オブジェクトを悪用する XST は、現在はそもそも成功しづらい手法となっているようですね*3。XST が発見されたのが 2003 年 1 月頃であり、すでに 7 年以上も経過しています。この期間にブラウザもきちんと対策をすすめてきたと言えそうですね。過去にコンセプトとして発表されたが、実害が起きることもなく、現在では成立しない攻撃手法は他にも多そうです。
次節から確認方法、確認結果をまとめています。興味のある方のみどうぞ。
主要 5 ブラウザの対応状況の確認
確認方法
VMware Server上で動作している Ubuntu 8.04(IP: 192.168.0.250) に以下の HTML ファイルを用意し、主要 5 ブラウザでこの HTML ファイルを閲覧しました。この HTML ファイルを閲覧し、[CLICK] ボタンをクリックし、TRACE メソッドが送信されるか確認しました。正常に送信されれば、HTTP レスポンスをダイアログウインドウで確認できるという簡単な仕組みです。
<html> <head> <title>xmlHttpRequest Test -TRACE- </title> <script type="text/javascript"> function a(){ var xmlHttp = new XMLHttpRequest; xmlHttp.open("TRACE", "http://192.168.0.250/",false); xmlHttp.send(); xmlDoc=xmlHttp.responseText; alert(xmlDoc); } </script> <body> <input type="button" name="b" value="CLICK" onclick="a();"> </body> </html>
ちなみに、"TRACE" を "GET" に変更し、手順どおり実行すると、以下のようになります。http://192.168.0.250/ の内容がダイアログウインドウに表示されました。
確認結果
主要 5 ブラウザの確認方法を実施した結果を以下の表にまとめました。大体のブラウザでは、確認方法を実施すると、JavaScript 実行時にエラーが発生します。主要 5 ブラウザすべてで XMLHttpRequest オブジェクトを使った TRACE メソッドの HTTP リクエストを送信できないことが分かります。
ブラウザ | バージョン | 結果 |
---|---|---|
Internet Explorer | 8.0.6001.18702 | 送信できない |
Mozilla Firefox | 3.6.6 | 送信できない |
Opera | 10.60 | 送信できない |
Safari for Windows | 5.0 | 送信できない |
Google Chrome | 5.0.375.99 | 送信できない |
各ブラウザにおいて、確認方法を実施した際に生じたエラーを以下にまとめます。
■Internet Explorer
なお、過去 Internet Explorer では "TRACE" を "\nTRACE" に変更することで、TRACE メソッドを送信できたようですが(参考情報を参照)、現在は修正されているようです。実際に "TRACE" を "\nTRACE" に変更して確認してみましたが、上図と同じ結果となりました。
■Safari for Windows
Safari では初期設定で開発メニューが表示されていません。エラーコンソールを確認するためには、[設定]メニューから[詳細]タブの[メニューバーに"開発"メニューを表示]を有効にしておく必要があります。
参考情報
- WhiteHat Security - Whitepaper - Cross-Site Tracing (XST)
- Cross Site Tracing | 鳩丸ぐろっさり (用語集)
- エラーメッセージの危険性:Webアプリケーションに潜むセキュリティホール(4) - @IT
- 「●Basic認証のIDとパスワードが漏えいするXST(Cross-Site Tracing)」
- Wizard Bible vol.34 (2007,6,12)
- 「○第1章: XHRのリバースエンジニアリング」
- Cross-site tracing - Wikipedia