Slide 1

Slide 1 text

DOM Invader ー prototype pollution 対応の衝撃 ー @okuken3 2022.06.27 第20回 初心者のためのセキュリティ勉強会

Slide 2

Slide 2 text

0. 自己紹介 1. DOM Invader が prototype pollution に対応! 2. DOM Invader の復習 3. DOM Invader で prototype pollution を試してみよう! 4. まとめ Agenda

Slide 3

Slide 3 text

Kenichi Okuno  Twitter: @okuken3 自己紹介 ・セキュリティエンジニア ・三井物産セキュアディレクション(MBSD)所属 ・主にWebアプリケーション脆弱性診断を担当 ・趣味で全集中Burp extension ISTEを開発 ・過去職ではWebアプリ開発やプロダクトセキュリティなど 最近の出来事/一言 ・運動の習慣化 ・ISTEのSlackお気軽にご参加ください

Slide 4

Slide 4 text

1. DOM Invader が prototype pollution に対応!

Slide 5

Slide 5 text

リリース情報 Professional / Community 2022.6 [Early Adopter] (20 June 2022 at 12:37 UTC) https://portswigger.net/burp/releases/professional-community-2022-6

Slide 6

Slide 6 text

ドキュメント / 公式ブログ DOM Invader [PROFESSIONAL] [COMMUNITY] https://portswigger.net/burp/documentation/desktop/tools/dom-invader  - prototype pollution 関連の記載はなし(2022/06/25時点) Finding client-side prototype pollution with DOM Invader https://portswigger.net/blog/finding-client-side-prototype-pollution-with-dom-invader  - 解説動画あり ★おすすめ★  - prototype pollution 自体の平易な解説もあり Widespread prototype pollution gadgets https://portswigger.net/research/widespread-prototype-pollution-gadgets  - prototype pollution gadget の具体例をソースコードを交えて解説

Slide 7

Slide 7 text

2. DOM Invader の復習

Slide 8

Slide 8 text

※※ 詳細は過去LT資料を参照ください ※※ DOM Invader - Burp Suiteの新機能でJavaScriptに立ち向かう - https://speakerdeck.com/okuken/dom-invader Web Messaging のセキュリティ - DOM Invaderを添えて - https://speakerdeck.com/okuken/web-messaging-security

Slide 9

Slide 9 text

端的に言うと  ✓ 興味深いシンクとソースを検出&一覧表示!  ✓ スタックトレースの表示&該当行へジャンプ!  ✓ Web Messaging 特化の機能群もあるよ! 復習

Slide 10

Slide 10 text

ソース?シンク?? 復習

Slide 11

Slide 11 text

ソース?シンク?? eval element.innerHTML 値 location.pathname document.cookie location.hash 復習

Slide 12

Slide 12 text

DOM Invader の起動 1. Early Adopter になる  - DOM Invaderは正式リース前であり、Early Adopterにのみ提供されている(2022/06/27時点)  - 設定経路:User options > Misc > Updates  - 設定後に Help > Check for updates を実行すると、Early Adopterのリリースが取得される initial problems が含まれる版になるため、Burpを業務利用している場合は注意が必要です。 復習

Slide 13

Slide 13 text

2. 内蔵ブラウザを起動する  - DOM Invader は内蔵ブラウザ(Chromium)のアドオンとして実装されている  - 起動経路:Proxy > Intercept > Open Browser 3. Burp Suite Container extension(アドオン)をピン留めする DOM Invader の起動 復習

Slide 14

Slide 14 text

4. DOM Invader を有効化する  - デフォルトはoff(対象のWebアプリケーションを壊しかねないため) ※公式ドキュメント参照 診断対象以外のサイトにアクセスする際は無効化しておくのが無難でしょう。 DOM Invader の起動 復習

Slide 15

Slide 15 text

1. 開発者ツールを起動する(F12) DOM Invader の使い方 DOM Invader の独自タグが追加されている ※最新版ではタブが1つに統合されており、  タブ名は「DOM Invader」となっている シンク(Sinks)とソース(Sources)は ここに表示される 便利機能ボタン 復習

Slide 16

Slide 16 text

2. Consoleタブを画面下部に表示しておく(ESC) あとで使います! DOM Invader の使い方 復習

Slide 17

Slide 17 text

3. DOM Invader で prototype pollution を試してみよう!

Slide 18

Slide 18 text

1. 検証用サイトを開く https://portswigger-labs.net/dom-invader-prototype-pollution/ 公式ブログでも紹介されていた、 「prototype-pollution-query-string-gadget」 で動作を確認してみました。

Slide 19

Slide 19 text

2. Prototype pollution を有効化 ①「Prototype pollution is on」へ変更 ②「Reload」押下

Slide 20

Slide 20 text

3. Prototype pollution sources(ソース)が検出された! ① Prototype pollution sources が2箇所検出された! ②「Scan for gadgets」を押下して、  Prototype pollution gadgets のスキャンを開始する!

Slide 21

Slide 21 text

4. Prototype pollution gadgets を検索中・・・完了!検出あり!

Slide 22

Slide 22 text

5. Prototype pollution gadgets(シンク)が検出された! ① Prototype pollution gadgets が1箇所検出された! ②「Exploit」を押下して、  Prototype pollution によるXSSの発火を試みる!

Slide 23

Slide 23 text

6. XSS発火!! Prototype pollution によるXSSのためのペイロードが URLパラメータに追加されている。 開発者ツールのElementsタブでDOMの様子を確認。 URLパラメータで指定されたimgタグが挿入されている。

Slide 24

Slide 24 text

7. Prototype pollution gadgets(シンク)のJavaScriptコードを確認する ①「Stack Trace」のリンクをクリック ② Consoleに出力されたスタックトレースの中で、  確認したい箇所のリンクをクリック

Slide 25

Slide 25 text

8. ・・・???  空っぽ…

Slide 26

Slide 26 text

9. (気を取り直して) スタックトレースに記載の行番号のJavaScriptコードを見に行く (別画面のSourcesタブにて)該当箇所である110行27列目を確認。 innerHTML(=HTMLエスケープ無し) に o.html を代入している。 Prototype pollution source を利用することで o.html の汚染が可能であれば、 XSSのペイロードで汚染することにより、XSSが成立する。

Slide 27

Slide 27 text

10. Prototype pollution sources(ソース)のJavaScriptコードを確認する ①「Stack Trace」のリンクをクリック ② Consoleに出力されたスタックトレースの中で、  確認したい箇所のリンクをクリック

Slide 28

Slide 28 text

11. Prototype pollution sources(ソース)のJavaScriptコードを確認する この時点で、cur には {} で初期化された Object が入っており、 keys にはリクエストパラメータのパラメータ名を分割した配列が入っている。 先の例では、リクエストパラメータ __proto__[html]= が設定されていたので、 keys は [‘__proto__’, ‘html’] であり、 forループの1周目で cur に {}.__proto__ が代入され、 forループの2周目で {}.__proto__.html = “” が実行され、プロトタイプ汚染が 成立する。そして、汚染されたプロパティが先述の innerHTML への代入処理において o.html にて参照される。

Slide 29

Slide 29 text

まとめ  ✓ DOM Invader が prototype pollution に対応!  ✓ prototype pollution source および gadget の検出から Exploit まで!  ✓ 正式リリースが待ち遠しい!

Slide 30

Slide 30 text

No content