CVE-2025-23061 - Mongoose コマンドインジェクション
Mongoose < 8.9.5 の populate() 関数の match オプションに影響するコマンドインジェクション脆弱性の概念実証です。
脆弱性の詳細
CVE ID: CVE-2025-23061
重要度: CRITICAL (CVSS 9.0)
影響を受けるパッケージ: mongoose
影響を受けるバージョン:
- < 6.13.6
-
= 7.0.0 < 7.8.4
-
= 8.0.0 < 8.9.5
CVE-2024-53900 および CVE-2025-23061 のタイムライン
- 2024年11月7日: Dat Phung は Mongoose の重大な脆弱性を特定し、Snyk にセキュリティレポートを提出しました。
- 2024年11月26日: Mongoose はこの脆弱性に対処して修正するため、バージョン 8.8.3 をリリースしました。
- 2024年12月2日: National Vulnerability Database (NVD) は、この脆弱性について CVE-2024-53900 を公開しました。
- 2024年12月17日: Dat Phung は Mongoose の 8.8.3 パッチを分析し、依然として RCE (リモートコード実行) を可能にするバイパスを発見しました。詳細なセキュリティレポートは Tidelift に提出されました。
- 2025年1月13日: Mongoose はバージョン 8.9.5 をリリースし、バイパスに効果的に対処する強化されたパッチを導入しました。
- 2025年1月15日: National Vulnerability Database (NVD) は、新たに特定された脆弱性の重大性を強調し、CVE-2025-23061 を正式に公開しました。
根本原因
この脆弱性は、CVE-2024-53900 の不完全な修正に起因します。直接の $where インジェクションはブロックされていますが、攻撃者は $where 演算子を $and や $or などの論理演算子内にネストすることで、この保護をバイパスできます。
脆弱性のあるコードパス:
- ユーザーが
populate() の match パラメータを通じて入力を提供する
- アプリケーションがサニタイズされていないユーザー入力を match クエリで直接使用する
- Mongoose が論理演算子内にネストされた
$where をサニタイズできない
- 攻撃者が MongoDB サーバー上で任意の JavaScript を実行する
影響
- 情報漏えい: 適切な認証なしに機密データへアクセスできる
- 認証バイパス: 管理者専用の情報を取得できる
- 任意のコード実行: MongoDB サーバー上で JavaScript を実行できる
- データ改ざん: データベースのレコードを変更できる可能性
PoC のセットアップと実行
前提条件
- Node.js >= 14
- MongoDB がローカルで実行されているか、接続文字列でアクセス可能であること
インストール
# Install dependencies
npm install
# Optional: Use specific MongoDB URI
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
脆弱なサーバーの実行
サーバーは http://localhost:3000 で起動します。
エクスプロイトの実行
別のターミナルで:
参照
免責事項
この PoC は教育目的のみで提供されています。コンピュータシステムへの不正アクセスは違法です。この PoC は、自分が所有するシステム、またはテストする明示的な許可を得たシステムでのみ使用してください。