DOM ベース XSS
DOM ベース XSS とは何ですか?
DOM ベース XSSクライアントサイドの JavaScript が信頼できないデータをサニタイズせずに DOM シンクへ書き込むことで、注入と実行がすべてブラウザ内で完結する XSS。
DOM ベース XSS(Type-0)は、原因がすべてクライアントサイドのコードに存在するクロスサイトスクリプティングです。location.hash、document.referrer、window.name、postMessage、localStorage などのソースから取得した値を、サニタイズせずに innerHTML、document.write、eval、jQuery.html などの危険な DOM シンクへ渡すことで発生します。ペイロードがサーバを通らないため、従来の WAF やサーバログでは検知が困難です。対策として、textContent などの安全な API、モダンブラウザの Trusted Types、厳格な CSP、ソースからシンクへの汚染データフローを解析する静的解析ツールが推奨されます。
● 例
- 01
document.getElementById('out').innerHTML = location.hash.substring(1);
- 02
SPA ルータが window.location からの値をサニタイズせずテンプレートに描画する。
● よくある質問
DOM ベース XSS とは何ですか?
クライアントサイドの JavaScript が信頼できないデータをサニタイズせずに DOM シンクへ書き込むことで、注入と実行がすべてブラウザ内で完結する XSS。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
DOM ベース XSS とはどういう意味ですか?
クライアントサイドの JavaScript が信頼できないデータをサニタイズせずに DOM シンクへ書き込むことで、注入と実行がすべてブラウザ内で完結する XSS。
DOM ベース XSS はどのように機能しますか?
DOM ベース XSS(Type-0)は、原因がすべてクライアントサイドのコードに存在するクロスサイトスクリプティングです。location.hash、document.referrer、window.name、postMessage、localStorage などのソースから取得した値を、サニタイズせずに innerHTML、document.write、eval、jQuery.html などの危険な DOM シンクへ渡すことで発生します。ペイロードがサーバを通らないため、従来の WAF やサーバログでは検知が困難です。対策として、textContent などの安全な API、モダンブラウザの Trusted Types、厳格な CSP、ソースからシンクへの汚染データフローを解析する静的解析ツールが推奨されます。
DOM ベース XSS からどのように防御しますか?
DOM ベース XSS に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
DOM ベース XSS の別名は何ですか?
一般的な別名: Type-0 XSS, クライアントサイド XSS。
● 関連用語
- attacks№ 240
クロスサイトスクリプティング(XSS)
他のユーザーが閲覧するページに悪意あるスクリプトを注入し、当該サイトのオリジンとして被害者のブラウザで実行させる Web 脆弱性。
- attacks№ 1107
格納型 XSS
攻撃者が送り込んだスクリプトがサーバ側に保存され、ページを閲覧したすべてのユーザのブラウザで実行される永続型クロスサイトスクリプティング。
- attacks№ 912
反射型 XSS
攻撃者が制御するリクエストパラメータが即時にレスポンスへ反映され、被害者のブラウザで実行される非永続型 XSS。
- appsec№ 214
コンテンツセキュリティポリシー (CSP)
スクリプト・スタイル・フレームなどの読み込み元をブラウザに指示する HTTP レスポンスヘッダで、XSS やデータ注入攻撃の影響を抑える。
- vulnerabilities№ 869
プロトタイプ汚染
信頼できない入力により Object.prototype を書き換え、全オブジェクトにプロパティを混入させて挙動を変える、場合によっては RCE に至る JavaScript の脆弱性。
- appsec№ 773
出力エンコーディング
信頼できないデータを HTML・JavaScript・URL・SQL・シェルなど特定の出力コンテキストで安全な形式に変換し、コードとして実行されるのを防ぐ処理。
● 関連項目
- № 104ブラインド XSS