Kenji Suzuki
kenji****@gmail*****
2011年 9月 1日 (木) 10:22:17 JST
Kenji です。 以前から指摘されている $this->input->ip_address() で IP アドレス偽装が可能 なこのバグですが。 #227: Input library does not set IP correctly https://github.com/EllisLab/CodeIgniter/issues/227 修正済み(2.1.0-dev で)とされています。 しかし、まだ、 $_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