Skip to content

Instantly share code, notes, and snippets.

@mala
Created September 26, 2012 15:07
Show Gist options
  • Save mala/3788589 to your computer and use it in GitHub Desktop.
Save mala/3788589 to your computer and use it in GitHub Desktop.
hostsファイルにloopbackアドレス書くのは危険か、の話
9/25にGoogle+に書いたものの転載、脅威の度合いは各々判断してください
----
補足
DNS Rebinding対策として、DNSキャッシュサーバーがプライベートアドレスを返さないようにフィルタしている、というのは
http://labs.cybozu.co.jp/blog/kazuho/archives/2007/11/djbdns_and_anti-dns_pinning.php で書かれているような対策のこと
要点は
1.別途DNSリバインディング対策をしている場合に、その穴を自分で復活させてしまうことになる
2.ホスト指定で通信を許可するようなアプリケーションを使ってる場合に、後天的に接続先が変化する
(元々アプリ配布元に悪意があれば可能だが、第三者が脆弱性を付く場合や、DNSキャッシュサーバーがローカルIPを返さないようにフィルタしてても攻撃が可能になる)
3.ローカルで何らかのサービスが立ち上がってる + 全ポート接続可能やSocket接続可能な場合、通常のSOP突破より影響が大きい
----
+徳丸浩
危険かというと、そこまでは思いませんが、攻撃の深刻度が増すケースというのはあると思います。本来想定していたホストとの通信が、別ホストとの通信に変わるのだから何らかの不具合が発生する可能性は常にあります。
1. 指定ホストへの通信を許可するようなパーミッションモデルを採用しているアプリケーションを使っている
2. 1のアプリの作者に悪意があるか、脆弱性がある
3. DNS Rebinding対策として、DNSキャッシュサーバーがプライベートアドレスを返さないようにフィルタしている
4. ユーザーが hosts ファイルを書き換えて、特定のホストを127.0.0.1に向けてしまう
ユーザーがインストール時に本来想定していた「アプリケーションから通信可能なホスト」が、後から変化することになります。
3によってDNS Rebindingによる攻撃を防いでいるにも関わらず、ローカルで動いているサービスに対して攻撃が可能になります。
一方的にformを送信するだけであれば、元から出来ることなので、典型的には
- localhost上で動いている何らかのサービスの、CSRF対策されているフォームを突破できる
- localhost:3000やlocalhost:5000で動いてる開発中のアプリケーションの内容を見られる
というのが想定できます。
現実的には3のような対策は現時点では殆ど行われていないので、1,2の段階で既に危険ということになるでしょうけど。開発者に悪意がある + DNSレコード書き換え、ではなくても、利用者がhosts書き換え + 第三者が脆弱性を突く、というケースでも攻撃が成立するので、その点でも違いがある。
ブラウザ上のDNS Rebindingの場合にはSame originと誤認可能な範囲でしか攻撃が成立しませんが、ホスト指定で全ポート許可、というケースもあります。
Google Chromeの拡張機能や
http://d.hatena.ne.jp/higepon/20110518/1305705440
http://stackoverflow.com/questions/11425591/match-port-in-chrome-extension-pattern
Socket APIでは、ワイルドカード使うと全ポートへのアクセスが許可されます。
http://developer.chrome.com/trunk/apps/app_network.html
つまりインストール時にはexample.comの全ポートに対する通信の許可だな、と思って使っていたものが、
別途DNS Rebinding対策をしていたとしても、hostsの書き換えで 127.0.0.1 example.com をやられてしまうと
そのアプリは後天的に127.0.0.1の全ポートに対してアクセス許可されることになります。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment