DOM Invaderには、Webメッセージ使用したDOM XSSをテストするための機能が数多くあります。これは、次の通りです:
ページ上のpostMessage()
メソッドで送信されたすべてのWebメッセージを、それに関する有用な情報とともにログに記録します。これは、HTTPリクエストとレスポンスの履歴をBurp Proxyが表示するのと似ています。
手動でDOM XSS脆弱性を調査するために、Webメッセージの変更と再送信が行えます。これは、変更されたHTTPリクエストをBurp Repeaterが再送信するのと似ています。
DOM XSSを調査するために、Webメッセージの変更と送信をあなたの代わりに自動で行います。
DOM InvaderのMessagesビューから、これらのすべての機能にアクセスできます。
これらの機能を利用するには、まずDOM Invaderの設定メニューでPostmessageのインターセプトを有効にする必要があります。詳細は、メイン設定を参照してください。
WebメッセージベースのDOM XSSについてブラッシュアップしたい場合は、Webセキュリティアカデミーをチェックしてください。ここには意図的に脆弱性を組み込んだラボがあるので練習もできます。
対象サイトの機能に影響を与えないよう、DOM InvaderのWebメッセージ機能はデフォルトで無効になっています。
これらの機能を有効にするには:
DOM Invaderの設定メニューに移動します。
Postmessage interceptionスイッチを選択します。
Reloadをクリックし、ブラウザをリロードします。これは、変更を有効にするために必要です。
Webメッセージのインターセプトを有効にすると、ページ上のpostMessage()
メソッドで送信されたすべてのWebメッセージが自動的に記録されます。デフォルトで、検出したメッセージイベントハンドラに対して、独自のメッセージの生成と送信も行います。
これらはMessageビューで確認できます。
DOM Invaderはデフォルトで、あなたの代わりに興味深いメッセージを識別しフラグを立てようとします。これは、次のようにメッセージを変更して実現します:
メッセージのdata
プロパティにカナリアを挿入します。DOM Invaderはこれを利用して、このデータがたどり着くシンクを特定できます。DOMビュー内の他のソースと同様です。
メッセージのオリジンを、期待されるドメイン名で始まり、期待されるドメイン名で終わる偽のオリジンに置き換えます。これによりDOM Invaderは、メッセージのオリジンの検証ロジックや正規表現に欠陥のあるイベントハンドラを発見できます。
この2つの機能は、DOM Invaderの設定メニューで無効にできます。詳細は、Webメッセージの設定を参照してください。
DOM Invaderは、観察された動作に基づいて、悪用可能と思われるメッセージに自動的にフラグを立て、問題の深刻度と信頼度の推定値を表示します。DOM Invaderが自動検出できない脆弱性が含まれている可能性があるため、ページ上で送信されたすべてのメッセージは、少なくとも情報の重要度で表示されます。
各メッセージをクリックすると、そのメッセージの詳細な情報を表示できます。たとえば、origin
、data
、source
プロパティが、クライアント側JavaScriptによってアクセスされているかどうかなどです。
この情報は、メッセージが有用かどうかを判断する手がかりとなり、適切なエクスプロイトを作成する方法がわかります。
クライアント側のコードがメッセージのorigin
プロパティにアクセスしていない場合は、オリジンが検証されていない可能性があります。その結果、任意の外部ドメインからイベントハンドラに対してクロスオリジンメッセージを送信できるかもしれません。
クライアント側のコードがメッセージのorigin
プロパティにアクセスしていても、安全ではない場合があります。バリデーションを回避できるかもしれません。その方法を見つけるために、DOM Invaderはスタックトレースで、コード内の関連する行へのリンクを表示します。詳細は、クライアント側コードの検討を参照してください。
メッセージのdata
プロパティは、ペイロードを挿入する潜在的な場所です。JavaScriptがこのプロパティにアクセスしていない場合、シンクには渡せません。この場合、このメッセージは重要ではありません。
メッセージのsource
プロパティは、メッセージ送信元のwindow
オブジェクトへの参照です。実際には、通常はiframeへの参照です。特定の信頼されたiframeからメッセージが送信されていることを確実に確認するために、Webサイトは多くの場合source
プロパティを検証します。
オリジンと同様に、クライアント側のコードがこのプロパティにアクセスしていても、必ずしもソースが検証されていること、およびこの検証が回避できないことが保証されているわけではない点に注意してください。
DOM Invaderは、Burp RepeaterのHTTPリクエストと同じように、Webメッセージの変更や再送ができます。これにより、WebメッセージをソースとしたDOM XSSの調査がより容易になります。
変更したWebメッセージを送信するには:
Messagesビューで任意のメッセージをクリックすると、メッセージの詳細ダイアログが開きます。
必要に応じて、Dataフィールドを編集します。
Sendをクリックします。
例えば、イベントハンドラがオリジンの検証を行わず、データをelement.innerHTML
のシンクに渡しているメッセージを発見できます。この場合、<
、>
、"
などの文字がエスケープされているかどうかをテストするメッセージを送信し、その後これらの文字をペイロードに使用した概念実証を作成して送信できます。
Webメッセージを使用した悪用可能な脆弱性をDOM Invaderが発見すると、概念実証のHTMLを生成しレポートに含められます。
概念実証を生成するには:
脆弱なメッセージを選択すると、メッセージの詳細ダイアログが開きます。
エクスプロイトに必要な値を変更します。
Build PoCをクリックします。クリップボードにHTMLが保存されます。
DOM Invaderは高度な設定が可能です。DOM Invaderの高度な機能と、特定サイト向けに動作を微調整する方法は、Webメッセージの設定を参照してください。