CakePHP(1.2.x 以降全て)の Paginate / PaginatorComponent にて SQL インジェクション可能な脆弱性が見つかりました。
すでに cakephper さんの blog でも注意勧告されていますが、 連休中にリリースされた情報ということで見落としている人もいると思うので、こちらでも。
内容
この脆弱性を悪用すると Paginate / PaginatorComponent にて SQL インジェクションが可能となります。
現在は影響の大きさを考慮して、公式サイトでは脆弱性の詳細は明らかにされていませんが(一定期間、ユーザのアップグレードを待って公開するようです。)、私が開発環境で試したところ、SQL インジェクション可能であることが確認できました。
対象
Paginate / PaginatorComponent を利用している全ての CakePHP アプリケーションが対象となります。
Paginate / PaginatorComponent を利用していない場合は、本脆弱性は存在しませんが、今後利用する可能性も考慮して、可能であれば対応しておいた方が良いです。
簡易的ですが、Paginate / PaginatorComponent を利用しているか否かは以下のコマンドで調べることができます。1 件でも該当行があれば、Paginate / PaginatorComponent を利用している可能性があるので、下記対応を検討して下さい。
$ cd /path/to/cake $ find ./app -type f -name "*.php" | xargs grep -i paginat
対応方法
下記のいずれかの方法で対応を行なって下さい。b. についてはフレームワークを理解している必要がありますので、内容が理解できないようであれば a. の方法をおすすめします。
a. 最新版にアップグレードする
この脆弱性の修正版(1.2.12 / 1.3.16 / 2.2.8 / 2.3.4)がリリースされていますので、こちらのバージョンへアップグレードして下さい。
Security Release – CakePHP 1.2.12, 1.3.16, 2.2.8 and 2.3.4 :: The Bakery: Everything CakePHP
b. 修正箇所を自分で適用する
ただちに CakePHP のアップグレードができないようであれば、今回の脆弱性に関する修正箇所を自分で適用する方法もあります。
各バージョンごとに差分を確認して適用を行なって下さい。
- CakePHP2.3.x
https://github.com/cakephp/cakephp/commit/c327bdc4bd309ce07fe2c20a2a9123f2165cae76#lib/Cake/Controller/Component/PaginatorComponent.php - CakePHP2.2.x
https://github.com/cakephp/cakephp/commit/b4efeb48b8554aba316d80eb89424a20b3be0b27#lib/Cake/Controller/Component/PaginatorComponent.php - CakePHP1.3.x
https://github.com/cakephp/cakephp/commit/8fc6b3fa9afc1e6859a138b4c86c0cb4d554caaf - CakePHP1.2.x
https://github.com/cakephp/cakephp/commit/db39c242cc8001106bae4530434bdac5878bf438
CakePHP を利用した OSS も対応を
CakePHP 自体の脆弱性なので、CakePHP をベースとした OSS もこの脆弱性が存在する可能性があります。随時それぞれの OSS にてセキュリティフィックス版がリリースされるかと思いますが、まだの場合は上記のとおりアップグレードを検討して下さい。
- baserCMS は、2.1.1にてセキュリティフィックス版(1.2.12)に更新されています。
- candycane は、master ブランチにてセキュリティフィックス版(2.3.4)に更新されています。
- Newer: 勉強会では、たった一つで良いのでアクションを
- Older: Amazon S3 stream wrapper で S3 を操作する