CyberGlossary

攻撃と脅威

NoSQL インジェクション

別称: NoSQLi

定義

ドキュメント型・キーバリュー型・グラフ型データベースに対し、クエリオブジェクトに演算子や JavaScript を埋め込む注入攻撃。

NoSQL インジェクションは、MongoDB、CouchDB、DynamoDB、Redis のように JSON、BSON、組み込み JavaScript を用いるクエリ言語を持つデータベースを狙います。文字列を脱出するのではなく構造を改ざんし、たとえば {"$ne": null} や {"$where": "..."} などの演算子を含む JSON を送って、認証回避、ドキュメントの一括取得、サーバーサイド JavaScript の実行を行います。動的言語(PHP、Node.js)の自動オブジェクトデシリアライズによってユーザー入力がそのままクエリ DSL に組み込まれ、攻撃が容易になります。対策としては厳格な型・スキーマ検証、ユーザー由来の演算子の拒否、パラメータ化されたクライアント API、サーバーサイド JavaScript の無効化、最小権限の DB ロールが挙げられます。

  • MongoDB のログインエンドポイントに {"username": "admin", "password": {"$ne": ""}} を送ってパスワード検証を回避する。
  • {"$where": "sleep(5000) || true"} を悪用し応答時間の差からデータを推測する。

関連用語