DOM Clobbering
id属性やname属性を利用してJavaScriptにグローバル変数を作成し、JavaScript側の挙動を操作しXSSなどに発展させる攻撃
例えば以下のようなコードがあったとする
code:index.js
TODO
実際にGmailでDOM Clobberingを利用したXSSが発見された
https://research.securitum.com/xss-in-amp4email-dom-clobbering/
ただし、適切にContent Security Policyが設定されていたので悪用はできなかった
<a>
HTMLAnchorElement.toStringがhrefを返すのを利用するテクニック
<a href="http://hoge" id="fuga">のとき、window.fugaを文字列として評価するとhttp://hogeを返す
Scheme部分は大文字から小文字になる仕様がある
CrewCTF 2023 - hex2dec
https://developer.mozilla.org/ja/docs/Web/API/HTMLAnchorElement/toString
iframe srcdocテク
<iframe id="abc" srcdoc="<a id='def'>">とすると、window.abc.defはsrcdoc内の<a>タグを指す
iframeの中にさらにiframeを入れることで何段階もDOM Clobberingを重ねることができる
https://splitline.github.io/DOM-Clobber3r/ が便利
他には、Content Security Policyがscript-src 'self'のときに、iframe srcdoc内でJSファイルを読み込むことで想定されてない動作を引き起こしたりできる
firefoxだと挙動が少し変わるときがある
m0lecon CTF teaser 2023 - Clobber the fox
未定義変数を定義したいときにも便利
TSG CTF 2023 - absurdresの非想定解
https://portswigger.net/research/dom-clobbering-strikes-back
corctf 2022 - modernblog
https://blog.huli.tw/2022/08/21/en/corctf-2022-modern-blog-writeup/
React RouterへのDOM Clobbering
TODO
SECCON CTF 2022 Finals - light-note
TODO
SECCON CTF 2023 Quals - blink
TODO
TSG CTF 2023 - Brainfxxk Challenge
ツール
https://splitline.github.io/DOM-Clobber3r/
https://domclob.xyz/
参考
https://portswigger.net/web-security/dom-based/dom-clobbering
https://book.hacktricks.xyz/pentesting-web/xss-cross-site-scripting/dom-clobbering
https://domclob.xyz/