@‍XSS (一部のブラウザのlocation.hrefがXSSを引き起こしやすいことに関する注意喚起)

概要

一部のブラウザのlocation.hrefは、XSSなどのセキュリティ問題を引き起こしやすい値を返します。この挙動により、location.hrefが自分と同じドメインのURLを返すことを前提に書いているコードは全て、正しく動かなくなる恐れがあります。

影響を受けるブラウザ

挙動の再現

1. http://l0.cm/atxss/へアクセス(このページへのシンプルなリンク)

2. location.hrefをクリックで確認

3. http://l0.cm/atxss/ が返される(想定通り)

4. http://example.com%2F@l0.cm/atxss/へアクセス(Safariではデフォルトの設定でフィッシング警告が出ますが続行してください)

5. location.hrefをクリックで確認

6. @の前の%2Fがデコードされた、http://example.com/@l0.cm/atxss/ が返される (この文字列に直接アクセスする場合、これは外部ドメイン「example.com」への参照となる)

何が問題なのか

location.hrefは自分の今居るURLそのものであると多くの人は認識しているはずです。もしこの認識に反してlocation.hrefが外部のドメインを指してしまうなら、location.hrefを頼りに新たなリソースを読み込もうとしたとき、不本意に外部ドメインのリソースを読み込んでしまうかもしれません。リダイレクトをしようとするなら、不本意に外部サイトへのリダイレクトを起こしてしまうかもしれません。

実際にはまった例

jQuery Mobile 1.2 Beta未満は読み込んでいるだけでXSS脆弱性を作ります

参考


2012年8月 2日: 公開

2012年8月 3日: Android4.0.4が影響を受けることを追記

2012年9月 6日: jQuery Mobile について追記

2012年9月20日: iOS 6.0 が影響を受けないことについて追記