ooooooo_qの日記

脆弱性の話とか

CakePHPの脆弱性を見つけた話(あるいはCakePHP Advent Calendar 2017 n日目)

bakery.cakephp.org

年末にCakePHP 2.x系のSQL injectionを見つけたので報告してました。

詳細

blog.ichikaway.com

内容としてはこちらの記事で書かれているようなCakePHPでよくあるSQL injectionです。

postConditionを使うとリクエストのbodyの形からCakePHPのfindでconditionsに使う形変換されるのですが、その際にキーの値がエスケープされるかというとそうでもない状態であったということです。

これだけでしたらCakePHPの仕様であって使い方の問題ともとれるのですが、ドキュメントを見ると脆弱性が発生する形で記載されておりそれは不味いだろうということで報告しました。

コントローラ - 2.x

public function index() {
    $conditions = $this->postConditions($this->request->data);
    $orders = $this->Order->find('all', compact('conditions'));
    $this->set('orders', $orders);

CakePHP脆弱性のハンドリングは GitHub - cakephp/cakephp: CakePHP: The Rapid Development Framework for PHP - Official Repositoryで示されていたので、それに沿ってメーリングリストにメールを送って修正の方針などでやり取りしました。12/9に最初のメールを送って、修正がリリースされたのは18日です。*1

Securityコンポーネントが設定されている場合の挙動を確認していなかったのでここ数日確認しているのですが、設定している限りは多分大丈夫そうです。*2 とはいえ修正自体はシンプルなので基本的にはバージョンを上げたほうが早いでしょう。

CakePHP Advent Calendar 2017

この脆弱性[CakePHP3] データ漏洩していませんか?RequestHandlerの危険性 - Qiitaの記事の脆弱性を確認のためCakePHPのコードを確認していたときに見つけものでした。なぜかこのアドベントカレンダーでは脆弱性の話が多かったような気がします。

*1:その間にid:ichikaway さんのピンポイントな記事が公開されたのでドキッとしました

*2:少し怪しいところは見つけたのですが、存在しないテーブルがwhere文に入ってエラーになるのを回避する方法が思い浮かばない……