2016-03-03
プライベートネットワークへのCSRFを緩和する仕様の提案
GoogleのMike West氏によって、Chromiumのメーリングリスト上で「インターネットからイントラネットへのCORSの厳格化」に関する提案が行われている。
「CORS and RFC1918」として提案している仕様も公開されているが、個人のリポジトリであり、W3Cのドキュメントにはなっていない。
背景
「プライベート網のアドレス割当(RFC1918)」で記述されているように、プライベートとパブリックのアドレスは区別されています。しかし、ユーザエージェントはそれらを分離して扱っていません。
悪意を持ったPublicなWebサイトは、クライアントにローカルのプライベートネットワークのデバイス・サーバに対してリクエストを送らせることが出来ます(CSRF攻撃)。
以下のドキュメントに記述されているような、ネットワーク内のルータに対するCSRF攻撃などもありました。これらの幾つかは、プリフライトを伴わない単純なGETリクエストで攻撃が成功しました。
これらの攻撃を緩和するために、PublicなインターネットからイントラネットへのCORSにOPT-INする方法を追加します。
例
以下のような、インターネット上のWebサイトからプライベートネットワークのルータへのCSRF攻撃を例にする。
- 1. プライベートネットワーク内のユーザエージェントが、悪意あるhttps://csrf.attack/にアクセスする
- 2. https://csrf.attack/は、以下のようなHTMLでユーザにmulticast DNSでルータのプライベートアドレスを解決させ、HTTPリクエストを送信させる。
<iframe href="https://admin:admin@router.local/set_dns?server1=123.123.123.123"> </iframe>
- 3. ユーザエージェントは、PublicネットワークのWebサイトからPriveteネットワークへのリクエストが生成されたことに気づき、preflight requestを送信する。これによってCSRF攻撃を防ぐことができる。
OPTIONS /set_dns?... HTTP/1.1 Host: router.local Access-Control-Request-Method: GET Access-Control-Request-External: true ... Origin: https://csrf.attack
プライベートネットワークの例をあげたが、ループバックアドレスに対しても同様に動作する。
追加されるヘッダ
この仕様において2つヘッダが定義されている。それぞれpreflightの手続きの中で使用される。
- Access-Control-Request-External : preflight requestで、リクエストがExternalからであることを示す。
- Access-Control-Allow-External : preflight requestに対する応答で、Externalからのリクエストに対して安全に応答できることを示す。
追加されるCSPディレクティブ
この仕様においてCSPディレクティブが追加される。
CSPにおいて「treat-as-public-address」を指定することで、そのサービスをPublicなWebサービスとして扱わせることが出来る。
- 81 https://www.google.co.jp/
- 21 https://www.google.co.jp
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwje443U8aXLAhVKkZQKHZOSDY0QFggbMAA&url=http://d.hatena.ne.jp/ASnoKaze/20141016/1413454595&usg=AFQjCNEJPMBdL4gishpRq9gYzEuw3Sdh1w&bvm=bv.115339255,d.dGo
- 2 http://reader.livedoor.com/reader/
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0ahUKEwj1lrnhwaXLAhXLlZQKHfGaAYYQFggjMAE&url=http://d.hatena.ne.jp/ASnoKaze/20141015/1413360514&usg=AFQjCNEpOgLb3c3jW9RkqGieyQUUKPiSyg&sig2=4H92rxQX9qGi1Vq9vycHHQ
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwjhreeS9aXLAhUDopQKHT7RCvUQFggoMAI&url=http://d.hatena.ne.jp/ASnoKaze/20141227/1419697189&usg=AFQjCNEJ0DbESImCksb6R1EDQ3uirgGmXg&bvm=bv.115339255,d.dGo
- 2 https://www.google.com/
- 1 http://10.160.84.231:15871/cgi-bin/blockOptions.cgi?ws-session=4180369870
- 1 http://b.hatena.ne.jp/nishitki/?with_favorites=1&of=0
- 1 http://d.hatena.ne.jp/notify-NotifyUser_POST_NG_CATEGORY?aHR0cDovL2QuaGF0ZW5hLm5lLmpwL0FTbm9LYXplLzIwMTUwODE3LzE0Mzk4MzA1NDM=