Intigriti Challenge 0526: Username から DOM Clobbering で tracker loader に到達する Stored XSS
Intigriti Challenge 0526 で、accepted された display-name XSS とは別に、username から `PixelAnalyticsConfig` を DOM clobbering して、analytics 用の script loader に到達する経路を見つけた。 この経路では、`onerror` や `ontoggle` のようなイベント属性を使わない。 HTML として挿入された ` ` 要素で `window.PixelAnalyticsConfig` を作り、アプリ内の tracker loader に外部 JavaScript を読み込ませる。 対象は次のページ。 ```text https://challenge-0526.intigriti.io/challenge ``` ## 使った payload 登録時の username に次を入れる。 ```html u ``` `YWxlcnQoMSk7` は Base64 で、デコードすると次になる。 ```js alert(1); ``` `httpbin.org/base64/YWxlcnQoMSk7` は、レスポンス本文として `alert(1);` を返す。 この URL を script として読み込ませる。 ## 再現手順 まず、新規ユーザー登録時に username として payload を指定する。 ```html u ``` 登録後、ログインした状態で次の URL を開く。 ```text https://challenge-0526.intigriti.io/challenge#testimonials ``` Testimonials 画面を開くと、nav に username が描画される。 その後、analytics loader が `window.PixelAnalyticsConfig` を読み、外部 script が読み込まれる。 Chrome では `alert(1)` が表示された。 ## 原因 この経路は、次の2つが組み合わさって成立する。 1つ目は、username が nav の描画時に HTML として挿入される点。 ```js nav.i...