クライアント側プロトタイプ汚染のテスト

DOM Invaderには、クライアント側プロトタイプ汚染の脆弱性テストを補助する機能が数多くあります。これにより、主に次の作業が可能です:

プロトタイプ汚染の有効化

対象サイトの機能に影響を与えないよう、DOM Invaderのプロトタイプ汚染機能はデフォルトで無効になっています。これらの機能を有効にするには:

  1. DOM Invaderの設定メニューに移動します。

  2. Attack typesで、Prototype pollution is onになるようにスイッチを切り替えます。

  3. Reloadをクリックすると、ブラウザが更新されます。これは、変更を有効にするために必要です。

DOM Invaderのプロトタイプ汚染を有効化

これで、ブラウズ中にDOM Invaderがプロトタイプ汚染のソースをスキャンするようになります。

プロトタイプ汚染のソースの検出

プロトタイプ汚染を有効にすると、Object.prototypeに任意のプロパティを追加できるソースがないか、DOM Invaderが自動的にページをチェックします。発見されたソースはDOMビューに表示され、さらにテストするための有用な情報や機能も表示されます。

プロトタイプ汚染のソースの検出

この例でDOM Invaderは、location.hashをソースとしてObject.prototypeを汚染する2つの潜在的なテクニックを特定しています。

プロトタイプ汚染のソースの手動確認

DOM Invaderがプロトタイプ汚染の潜在的なソースを発見すると、それを手動でも確認できます。

このソースによるプロトタイプ汚染が可能かどうか手動でテストするには:

  1. DOMビューで、該当するソースの横にあるTestボタンをクリックします。DOM Invaderは、選択されたソースを使用して、Object.prototypeに任意のプロパティを追加する新しいタブを開きます。

  2. 新しいタブで、ブラウザのコンソールに移動します。DOM InvaderがObject.prototypeを自動的に出力していることに注目してください。

  3. ノードを展開し、概念実証のtestpropertyがこのオブジェクトに含まれていることを確認します。

    PoCプロパティによるObject.prototype汚染
  4. コンソールで、新しいオブジェクトを作成します:

    let myObject = {};
  5. 新しいオブジェクトがプロトタイプチェーンを通じてtestpropertyを継承していることを確認します:

    console.log(myObject.testproperty); // Output: 'DOM_INVADER_PP_POC'

プロトタイプ汚染ガジェットのスキャン

"gadget"プロパティにもアクセスできなければ、プロトタイプ汚染のソースは役に立ちません。これは、適切にサニタイズされずにシンクに渡される、ユーザーが制御可能な任意のプロパティです。このようなガジェットを手動で探すのは非常に面倒ですが、DOM Invaderはこのプロセスを自動化できます。

特定のソースを使用しているガジェットをスキャンには:

  1. DOMビューで、DOM Invaderが検出したプロトタイプ汚染ソースの横にあるScan for gadgetsボタンをクリックします。DOM Invaderは新しいタブを開き、適切なガジェットのスキャンを開始します。

  2. 同じタブで、デベロッパーツールパネル内のDOM Invaderタブを開きます。スキャンが終了するとDOMビューに、DOM Invaderが発見したガジェットからアクセスできたシンクが表示されます。この例では、htmlというガジェットのプロパティがinnerHTMLシンクに渡されています。

プロトタイプ汚染ガジェットのスキャン

概念実証のエクスプロイトを生成

DOM Invaderがプロトタイプ汚染用のガジェットを見つけると、ソース、ガジェット、シンクを組み合わせてXSSを確認するための概念実証を自動生成します。

発見されたシンクの横にあるExploitボタンをクリックするだけです。DOM Invaderは新しいウィンドウを開き、そこでalert()を正常に呼び出します。

続きを読む

DOM Invaderは高度な設定が可能です。DOM Invaderのプロトタイプ汚染機能と、特定サイト向けに動作を微調整する方法は、プロトタイプ汚染の設定を参照してください。