Skip to content

Instantly share code, notes, and snippets.

@masatokinugawa
Last active May 27, 2020 04:49
Show Gist options
  • Save masatokinugawa/304d243b6a5142500b9b9efb3fb540c0 to your computer and use it in GitHub Desktop.
Save masatokinugawa/304d243b6a5142500b9b9efb3fb540c0 to your computer and use it in GitHub Desktop.
続 Yahoo広告配信用 s.yimg.jp ドメインでのXSSの解説(JSONP XSS編)

2/7 malaさんの記事を読む

https://gist.github.com/mala/1d30e42e9e99520b7a501e9d2458eb49

  • 確かに (*.)yahoo.co.jp には制限されている。
  • (*.)yahoo.co.jpは知恵袋からヤフオクまで大量のページを持っている。
  • どこがスクリプトとしてロードされてもXSSが起きない?そんな訳なさそう。

そのときのぼやき: https://twitter.com/kinugawamasato/status/828846516882116608

2/8 JSONPを使ったXSSの発見・報告

  • (*.)yahoo.co.jpにcallback名を指定できるJSONPをみつける。
  • callback名はバリデーションがなく、好きな文字列を書ける。
  • (現在はcallbackパラメータ自体を受け取らなくなっている)

http://weather.yahoo.co.jp/weather/zoomradar/c/?callback=alert(1)//

/* CVE-2014-4671 */
alert(1)//( {"list":[],"status":40000} )

この部分をtag_pathに指定することでXSSが可能。

http://s.yimg.jp/images/listing/tool/yads/yads-iframe.html#?tag_path=http://weather.yahoo.co.jp/weather/zoomradar/c/%3Fcallback%3Dalert(1)//

2/9 修正を確認

  • tag_pathからURLをうけとらなくなった。
  • ロードされるスクリプトは //yads.yjtag.yahoo.co.jp/tag? まで固定で、クエリのみ受け取るようになった。
  • ひとまずそれ以外のURLを読むことはなくなったが...(多重縛りXSS編に続く)

ここまでのまとめ

  • (*.)example.com の任意のリソースをスクリプトとしてロードできる状況はまだ安全でないと考えるべきです。
  • JSONPがなくてもユーザがアップロードしたファイルやオープンリダイレクトがあれば攻撃スクリプトとして使えるかもしれません。
  • 似た事例として、 Content-Security-Policy: default-src *.yahoo.co.jp はこのようにバイパスされるということを覚えておきましょう。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment