[Codeigniter-users] $this->input->ip_address() で IP アドレス偽装可能

Back to archive index

Matsumura Naoki mat****@retai*****
2011年 9月 2日 (金) 14:53:52 JST


松村です。

> このヘッダを送るプロキシなどってどんなのがあるんでしょうね?

数年前の情報のようですが、

  http://www.nurs.or.jp/~sug/homep/proxy/proxy7.htm

によると、Traffic-Server と NetCache が
HTTP_CLIENT_IP を使うようです。

※昨日は www.nurs.or.jp にアクセスできたのですが
  今は落ちているようなので、Google キャッシュも提示
  しておきます。
     http://webcache.googleusercontent.com/search?q=cache:0ytskLaAZncJ:www.nurs.or.jp/~sug/homep/proxy/proxy7.htm+http_client_ip&cd=1&hl=ja&ct=clnk&gl=jp&client=firefox-a


(2011/09/02 10:27), Kenji Suzuki wrote:
> Kenji です。
> 
> 
> On Thu, 1 Sep 2011 13:29:10 +0900
> Yoshiyuki Okamoto<okamo****@gmail*****>  wrote:
> 
>> ごぶさたしております。
>> 岡本です。
>>
>> 有用な情報ありがとうございます。
>> 意識せずに、IPアドレス認証につかっている方がいたら非常に危険ですね。。
>> ですので報告したほうがいいと思いました。
> 
> pull request しました。
> https://github.com/EllisLab/CodeIgniter/pull/371
> 
> CakePHP と同じように設定で信用するかどうかを指定するようにしてみました。
> しかし、デフォルトは信用しないにしてあります。
> 
> 
>> HTTP_CLIENT_IPについては、(悪意のないケースで)プロキシ経由の場合に正しいIPをとりたいという意図なのかな?と思いました。
> 
> このヘッダを送るプロキシなどってどんなのがあるんでしょうね?
> 
> 
>> 私自身もこの辺を意識しないで、PHPからアプリの操作ログ書込する際にip_address()関数を使っていました。。
>> この関数はリバープロキシ下の場合等も考慮してるんですね(便利ですね!)。
> 
> はい、X-FORWARDED-FOR については設定がありますね。なので通常は、これで
> 対応できるように思います。
> 
> 
>> 仕様とするか、脆弱性とするかは人によって考え方が違ってくる気がしますが、
>> もしも仕様とするのであれば、ユーザーガイドのip_address()の説明のところに補足が必須かと思いました。
> 
> そうですね。
> 
> 
> // Kenji
> 
> 
>> ご参考まで。
>>
>>
>> 2011年9月1日10:22 Kenji Suzuki<kenji****@gmail*****>:
>>> Kenji です。
>>>
>>>
>>> 以前から指摘されている $this->input->ip_address() で IP アドレス偽装が可能
>>> なこのバグですが。
>>>
>>> #227: Input library does not set IP correctly
>>> https://github.com/EllisLab/CodeIgniter/issues/227
>>>
>>
>>> しかし、まだ、
>>>
>>> $_SERVER['HTTP_CLIENT_IP']
>>>
>>> を無条件に信用しているため、この値を操作できる場合、IP アドレスを操作できます。
>>>
>>> 通常、このヘッダはクライアントから送れるものですので、攻撃者はどんな値も自由に
>>> 設定できると思うのですが、なぜ、この値を信用しているんでしょうかね?
>>>
>>> 調べたら、CakePHP でもデフォルトはこの値を信用するようになっているようです。
>>>
>>> https://github.com/cakephp/cakephp/blob/master/cake/libs/controller/components/request_handler.php#L471
>>>
>>> みんなそんなこの値が信用できる環境で使っているでしょうか?
>>>
>>>
>>> で、とりあえず、以下のような ip_address() を返すコントローラを作成し、
>>>
>>> https://gist.github.com/1185079
>>>
>>> CloudIgniter でテストしてみましたが、あっさり改竄した HTTP_CLIENT_IP
>>> のアドレスが返りました。
>>>
>>> テストのためのコードは、
>>> https://gist.github.com/1185081
>>>
>>>
>>> この HTTP_CLIENT_IP を無条件に信用するという仕様は脆弱性で本家にバグ
>>> 報告した方がいいですよね?
>>>
>>>
>>> // Kenji
>>>
>>> _______________________________________________
>>> Codeigniter-users mailing list
>>> Codei****@lists*****
>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>
>>
>> _______________________________________________
>> Codeigniter-users mailing list
>> Codei****@lists*****
>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> 
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> 
> 




Codeigniter-users メーリングリストの案内
Back to archive index