DOM XSS
DOMの脆弱性
DOMの脆弱性は、攻撃者が制御するソース(location.search
、document.referrer
、document.cookie
など)からのデータが安全でない状態でシンクに転送されると発生します。シンクは、悪意のあるデータが与えられると有害なコンテンツを実行またはレンダリングできる関数やオブジェクト(例:eval()
、document.body.innerHTML
)です。
ソースは、攻撃者によって操作可能な入力であり、URL、クッキー、Webメッセージなどが含まれます。
シンクは、スクリプトの実行などの有害な効果をもたらす可能性のある危険なエンドポイントです。
データが適切な検証やサニタイズなしにソースからシンクに流れると、XSSなどの攻撃が可能になります。
ソースとシンクのより最新のリストは、 https://github.com/wisec/domxsswiki/wiki で見つけることができます。
一般的なソース:
一般的なシンク:
jQuery | |||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
| |
|
|
| |
|
|
|
|
|
|
| ``Cookie操作 |
|
|
| |
|
|
| |
|
| ||
|
| `` | `` |
innerHTML
シンクは、現代のブラウザでは script
要素を受け入れず、svg onload
イベントも発火しません。これは、img
や iframe
のような代替要素を使用する必要があることを意味します。
この種のXSSはおそらく最も見つけにくいものであり、JSコードの内部を調べ、制御可能なオブジェクトを使用しているかどうかを確認し、その場合には任意のJSを実行する方法があるかどうかを見る必要があります。
これらを見つけるためのツール
例
オープンリダイレクト
From: https://portswigger.net/web-security/dom-based/open-redirection
DOM内のオープンリダイレクト脆弱性は、スクリプトが、攻撃者が制御できるデータを、異なるドメイン間でのナビゲーションを開始できるシンクに書き込む場合に発生します。
リダイレクションが発生するURLの先頭部分を制御できる場合、**javascript:alert(1)
**などの任意のコードを実行することが可能であることを理解することが重要です。
シンク:
Cookie manipulation
From: https://portswigger.net/web-security/dom-based/cookie-manipulation
DOMベースのクッキー操作の脆弱性は、スクリプトが攻撃者によって制御可能なデータをクッキーの値に組み込む場合に発生します。この脆弱性により、クッキーがサイト内で使用される場合、ウェブページの予期しない動作が発生する可能性があります。さらに、クッキーがユーザーセッションの追跡に関与している場合、セッション固定攻撃を実行するために悪用される可能性があります。この脆弱性に関連する主要なシンクは次のとおりです:
シンク:
JavaScript Injection
From: https://portswigger.net/web-security/dom-based/javascript-injection
DOMベースのJavaScriptインジェクション脆弱性は、スクリプトが、攻撃者によって制御される可能性のあるデータをJavaScriptコードとして実行するときに作成されます。
Sinks:
ドキュメントドメインの操作
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
ドキュメントドメインの操作に関する脆弱性 は、スクリプトが攻撃者が制御できるデータを使用して document.domain
プロパティを設定すると発生します。
document.domain
プロパティは、ブラウザによる 同一オリジンポリシー の 強制 において 重要な役割 を果たします。異なるオリジンからの2つのページがそれぞれ document.domain
を 同じ値 に設定すると、制限なしに相互作用できます。ブラウザは document.domain
に割り当て可能な値に一定の 制限 を課していますが、実際のページのオリジンに完全に関連のない値の割り当てを防ぐための例外が存在します。通常、ブラウザは 子ドメイン または 親ドメイン の使用を許可します。
シンク:
WebSocket-URL poisoning
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL poisoningは、スクリプトがWebSocket接続のターゲットURLとして制御可能なデータを使用する場合に発生します。
Sinks:
WebSocket
コンストラクタは、WebSocket-URLポイズニングの脆弱性につながる可能性があります。
Link manipulation
From: https://portswigger.net/web-security/dom-based/link-manipulation
DOMベースのリンク操作の脆弱性は、スクリプトが現在のページ内のナビゲーションターゲットに攻撃者が制御可能なデータを書き込む場合に発生します。これは、クリッカブルリンクやフォームの送信URLなどです。
Sinks:
Ajax request manipulation
From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Ajaxリクエストの操作脆弱性は、スクリプトがXmlHttpRequest
オブジェクトを使用して発行されるAjaxリクエストに攻撃者が制御可能なデータを書き込む場合に発生します。
Sinks:
ローカルファイルパスの操作
From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
ローカルファイルパスの操作の脆弱性 は、スクリプトが filename
パラメータとして 攻撃者が制御可能なデータをファイル処理API に渡すときに発生します。この脆弱性は、攻撃者がURLを構築して悪意のあるローカルファイルを開いたり書き込んだりする可能性があるため、別のユーザーが訪れると、ユーザーのブラウザが任意のローカルファイルを開いたり書き込んだりする 可能性があります。
シンク:
クライアントサイドSQLインジェクション
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
クライアントサイドSQLインジェクション脆弱性は、スクリプトが攻撃者が制御可能なデータを安全でない方法でクライアントサイドSQLクエリに組み込む場合に発生します。
Sinks:
HTML5ストレージの操作
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
HTML5ストレージの操作に関する脆弱性 は、スクリプトが攻撃者が制御可能なデータをWebブラウザのHTML5ストレージ(localStorage
またはsessionStorage
)に保存するときに発生します。この行動自体がセキュリティ上の脆弱性であるわけではありませんが、アプリケーションがその後その保存されたデータを安全でない方法で処理すると問題が発生します。これにより、攻撃者がストレージメカニズムを利用して、クロスサイトスクリプティングやJavaScriptインジェクションなどの他のDOMベースの攻撃を実行する可能性があります。
シンク:
XPath injection
From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
DOM-based XPath-injection vulnerabilities occur when a script incorporates attacker-controllable data into an XPath query.
Sinks:
クライアントサイドJSONインジェクション
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
DOMベースのJSONインジェクション脆弱性は、スクリプトが攻撃者が制御可能なデータを含む文字列をJSONデータ構造として解析し、その後アプリケーションによって処理される場合に発生します。
Sinks:
Webメッセージの操作
From: https://portswigger.net/web-security/dom-based/web-message-manipulation
Webメッセージの脆弱性は、スクリプトが攻撃者が制御可能なデータをブラウザ内の別のドキュメントにWebメッセージとして送信する場合に発生します。脆弱なWebメッセージの操作の例は、PortSwiggerのWebセキュリティアカデミーで見つけることができます。
シンク:
postMessage()
メソッドを使用してWebメッセージを送信すると、メッセージを受信するためのイベントリスナーが受信したデータを安全でない方法で処理すると脆弱性が発生する可能性があります。
DOMデータの操作
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
DOMデータの操作の脆弱性は、スクリプトがDOM内のフィールドに攻撃者が制御可能なデータを書き込む場合に発生します。この脆弱性は、攻撃者が別のユーザーが訪れると、クライアントサイドUIの外観や動作を変更できるURLを構築することができます。
サービス拒否
From: https://portswigger.net/web-security/dom-based/denial-of-service
DOMベースのサービス拒否の脆弱性は、スクリプトが攻撃者が制御可能なデータを安全でない方法で問題のあるプラットフォームAPIに渡すときに発生します。これには、呼び出されるとユーザーのコンピューターが過剰なCPUやディスクスペースを消費する可能性があるAPIが含まれます。このような脆弱性には、ブラウザがlocalStorage
にデータを保存しようとする試みを拒否したり、ビジーなスクリプトを終了したりすることで、重大な副作用が発生する可能性があります。
シンク:
Dom Clobbering
pageDom ClobberingLast updated