
Laravel向けMongoDB統合に重大なクエリインジェクション脆弱性(CVE-2026-88022)が判明
seoTitle: Laravel-MongoDBの脆弱性CVE-2026-88022
metaDescription: laravel-mongodbにNoSQLインジェクション脆弱性。where句の配列処理不備で情報漏洩の恐れ。即時アップデートと入力検証が必要。
本稿では、公表済みの情報をもとに、影響範囲の特定と一次対応の観点を整理する。深夜のオンコール対応を避けるためにも、稼働中プロジェクトを抱えるエンジニアは速やかに確認すべきである。
脆弱性の構造
問題箇所は、等価比較フィルターを生成する処理にある。NVDの記述によれば、リクエスト由来の値が配列のままクエリビルダーに渡された場合、MongoDB側の演算子として解釈される経路が存在する。これにより、攻撃者が任意フィールドに対するマッチ条件を構築できる。
laravel-mongodbはEloquent互換のインターフェースを提供する公式パッケージであり、whereIn、where、findなどフィルターチェーン全体への波及が推測される。等価比較演算子が暗黙的に配列を許容する設計上のギャップが、根本原因と推定される。
概念的なパターンを抽象化すると、以下のようになる。
// 攻撃リクエストの概念例
// GET /users?filter[id][]=1&filter[id][]=2
$filter = $request->input('filter');
User::where($filter)->get;
// 内部で $filter が連想配列として解釈され、
// MongoDBクエリとして { id: { $in: [...] } } に展開されるこの動作は、MongoDB側のスキーマレス特性と、Eloquentが入力型を寛容に受け入れる設計の組み合わせによって成立する。NVDの指摘する「意図しないドキュメントの取得や削除」は、この経路を通じて発生する。
確認と修正の手順
まずComposer.lockを精査し、laravel-mongodbのバージョンが修正済みリリースに達しているかを確認する。次に、アプリケーションコード側で以下の経路を抽出する。
- $_GET、$_POST、JSONボディから直接where句を組み立てる箇所
- 配列を引数に取るfind、first、where、whereInの呼び出し
- バリデーションを経由せずユーザー入力をクエリに渡す経路
- APIリソースのフィルタリング機能でユーザー入力を透過する箇所
バージョン更新に加え、入力検証層で「配列を等価比較値として渡さない」制約を加えることが望ましい。バリデーションルールでstring|integer型に限定し、配列を明示的に拒否する設計が有効である。
// バリデーション側での防御例
$validated = $request->validate([
'filter' => 'array',
'filter.*' => 'string|max:255',
'filter.id' => 'sometimes|integer',
]);依存パッケージ単体のバージョン管理に加え、アプリケーション層の入力検証で型を厳格化することで、防御層を厚くできる。Dockerコンテナで運用している場合は、composer update後にイメージを再ビルドし、デプロイパイプラインに整合性チェックを組み込むべきである。
検知と対応の優先順位
クエリログとMongoDB profilerを併用し、想定外の条件下でのdeleteMany実行や、大量ドキュメント取得の形跡を監視する。NVDが示す攻撃シナリオは、ログベースの事後検知で捕捉可能である。
具体的な監視項目は以下の通り。
- 等価比較フィルターに配列が渡されたリクエスト
- 短時間に複数のドキュメントを削除するdeleteManyクエリ
- 認証不要なエンドポイントでのfind呼び出し頻度の急変
- 通常時と異なるインデックスが選択されたクエリの増加
脆弱性公開から攻撃コード公開までのタイムラグは短いと推測されるため、パッチ適用までの間は監視頻度を引き上げるべきである。WAFにカスタムルールを追加し、配列型パラメータを含むリクエストを一時的にブロックする対策も有効である。
対応の優先順位を以下に整理する。
- laravel-mongodbのバージョンを確認し、修正済みリリースへ即時アップデート
- リクエスト入力からクエリを組み立てる経路をコードレビューで網羅
- バリデーションルールで配列型を明示的に拒否
- クエリログとprofilerで攻撃兆候を監視
- WAFまたはミドルウェア層で配列パラメータの一時ブロックを検討
根本的な解決はパッケージ側の修正に依存する。応急処置としては、入力検証の強化と一時的なレートリミット導入が考えられる。本番環境への適用前にステージングでクエリプランの差分を確認し、想定外のインデックススキャンが発生していないかを検証すべきである。