攻撃と脅威
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"} を悪用し応答時間の差からデータを推測する。
関連用語
SQL インジェクション
信頼できない入力から組み立てたクエリに攻撃者が制御する SQL 断片を埋め込み、データ窃取・改ざん・データベース全体の侵害につながる攻撃。
Command Injection
Command Injection — definition coming soon.
Input Validation
Input Validation — definition coming soon.
安全でないデシリアライゼーション
アプリが信頼できないデータをデシリアライズすることで、攻撃者が任意オブジェクトを生成し、しばしばリモートコード実行に至る脆弱性。
OWASP Top 10
OWASP Top 10 — definition coming soon.
認証の不備
認証やセッション管理の欠陥により、攻撃者が正規ユーザーになりすましたり、アカウントを乗っ取れたりする脆弱性カテゴリ。