https://gist.github.com/mala/1d30e42e9e99520b7a501e9d2458eb49
- 確かに (*.)yahoo.co.jp には制限されている。
- (*.)yahoo.co.jpは知恵袋からヤフオクまで大量のページを持っている。
- どこがスクリプトとしてロードされてもXSSが起きない?そんな訳なさそう。
そのときのぼやき: https://twitter.com/kinugawamasato/status/828846516882116608
- (*.)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が可能。
- tag_pathからURLをうけとらなくなった。
- ロードされるスクリプトは //yads.yjtag.yahoo.co.jp/tag? まで固定で、クエリのみ受け取るようになった。
- ひとまずそれ以外のURLを読むことはなくなったが...(多重縛りXSS編に続く)
- (*.)example.com の任意のリソースをスクリプトとしてロードできる状況はまだ安全でないと考えるべきです。
- JSONPがなくてもユーザがアップロードしたファイルやオープンリダイレクトがあれば攻撃スクリプトとして使えるかもしれません。
- 似た事例として、
Content-Security-Policy: default-src *.yahoo.co.jp
はこのようにバイパスされるということを覚えておきましょう。