この記事の所要時間: 約 1分44秒
cakebakerやCakePHP Users in JapanにもあるようにCakePHPにて任意のファイルが読み込めるセキュリティホールが見つかっています。
問題となるファイルは[app/webroot/js/vendors.php]です。このファイルはvendors/javascript/以下にあるjsファイルを読み込むものなのですが、is_file()やreadfile()がバイナリセーフではないため%00をファイル名に挿入することにより任意のファイルを読めてしまいます。
対応策は以下になります。
- 修正済みファイルを適用する。
- 使用していないならvendors.phpを削除してしまう。
そもそも[app/vendors/javascript]が無い場合はvedors.phpは使用していないはずのですので。(デフォルトでは[app/vendors/javascript])はありません。 - magic_quotes_gpcをOnにする。
文字化けの問題があるので日本語圏ではこれは無いでしょうね。
ただ現時点ではbake.phpで使用するテンプレートが修正されてないため、bake.phpで新規プロジェクトを作るとまた同じ問題が発生してしまいます。その場合は再度対策が必要となるためご注意を。
追記:
bake用テンプレートも修正されました。(Thanks dho!)
あとちょっと気になるのはjsファイルかどうか正規表現の部分です。
if(is_file('../../vendors/javascript/'.$file) && (preg_match('/(\/.+)\\.js/', $file)))
ここは後方一致になるように’/(\/.+)\\.js$/’にしておいた方が良いかと。あとこれは純粋に疑問なのですが\/はなぜ必要なのでしょうか。
まあこのファイル自体使いどころが良く分からなかったりするのですが。:P
トラックバック:0
- このエントリーのトラックバックURL
- /blog/2006/09/cakephp_vulnerable_vendors.html/trackback
- Listed below are links to weblogs that reference
- CakePHP vendors.phpにセキュリティホール from Shin x blog