※脆弱性診断を行う上でのスキルアップとして検証を行っております。この記事で知り得たことを悪用することは禁止とします。
概要
アドバイザリから引用した。

サニタイズされていないユーザー要求データが渡された場合、メソッド
Impact https://github.com/advisories/GHSA-6g8q-qfpv-57wpCake\Database\Query::limit()
とメソッドは SQL インジェクションに対して脆弱です。Cake\Database\Query::offset()
この問題は、4.2.12、4.3.11、4.4.10 で修正されています。
patch https://github.com/advisories/GHSA-6g8q-qfpv-57wp
環境作成メモ
ガンガンchatGPTに聞いた。

環境
- M1 Mac
- Docker
ミス1 platform: linux/arm64
が入ってなくて動かないコンテナがあった。
⇨M1 Macの場合はarm指定を入れる。
ミス2 volumesを仮想?にしていて、検証するうちにゴミが溜まってエラーになった。
⇨dockerマスターになるまではローカルのディレクトリを指定する。
出てきた課題1 古いバージョンのCakePHPはどうやってインストールする?
⇨composer.json
でバージョンいじってcomposer update
する。
動作確認
4.4.9
脆弱性が存在する4.4.9
であることを確認した。

chatGPTに頼んでデータやら容易してもらった。
INSERT INTO posts (title, body, created, modified) VALUES
('First Post', 'This is the first post.', NOW(), NOW()),
('Second Post', 'This is the second post.', NOW(), NOW()),
('Third Post', 'This is the third post.', NOW(), NOW());
public function limited()
{
if ($this->request->is('post')) {
$limit = $this->request->getData('limit');
$posts = $this->Posts->find()
->limit($limit)
->order(['created' => 'DESC']);
} else {
$posts = [];
}
$this->set(compact('posts'));
}
修正時のテストとして使われている「–」(コメント)で試してみる。
正常系

コメントあり(エラー起こらない想定)

コメント構文エラー

SQLインジェクションが成立していることが確認できた。
4.4.10(修正後)
修正後のコード。文字列チェックが入っている。
4.4.10に上げた。

先ほどと同じコメントを投げてみた。
修正コード通りのメッセージが表示されていた。

まとめ
仕様上では文字列以外を想定している関数もあるので、「'”」をエスケープするというだけではSQLインジェクションは防げない。
このCVEが2023というのが、これが浸透していない証拠だと感じる。
(djangoでも似たようなのあったよね)
コメント