
MongoBleed: CVE-2025-14847 メモリリーク発見ツール
MongoBleed は、CVE-2025-14847 を検出・実証するために設計された高性能なセキュリティ監査ツールです。この脆弱性により、認証されていないリモート攻撃者が、zlib の展開ロジックにおける長さ不一致の欠陥を悪用して、MongoDB サーバーから未初期化のヒープメモリの断片を漏えいさせることができます。
このスクリプトを安全にテストするには、以下の docker-compose.yml を使用して、脆弱性のある MongoDB 8.2.2 インスタンスを起動します。
インスタンスの起動:
docker-compose up -d
Python 3.8+ がインストールされていることを確認してください。外部ライブラリは不要です(標準の socket、zlib、concurrent.futures を使用)。
基本スキャン
python mongobleed.py --host 127.0.0.1 --port 27017
詳細オプション
python mongobleed.py --host 127.0.0.1 --threads 50 --range 100 10000 --output leak_dump.bin
このスクリプトは、巧妙に細工された OP_COMPRESSED(オペコード 2012)メッセージを送信します。ペイロードの非圧縮長を偽装します。MongoDB サーバーは「偽装された」サイズのヒープバッファを割り当て、そこにごく少量のデータを展開し、その後、未初期化のバッファ全体を誤ってクライアントに返します。
CVE-2025-14847 を恒久的に解決する唯一の方法は、OP_COMPRESSED の長さ検証ロジックの修正を含むバージョンに MongoDB バイナリをアップグレードすることです。
恒久的な修正(アップグレード)
MongoDB の公式パッチを適用してください。これらのバージョンには、展開されたデータサイズがメッセージヘッダーの uncompressedSize フィールドと一致することを確認する必須チェックが含まれています。
アップタイムの要件により即時のアップグレードが不可能な場合は、サーバー設定を変更して攻撃ベクトルをブロックできます。
脆弱な圧縮機能の無効化(推奨)
この脆弱性は zlib 実装に固有のものです。zlib を無効化し、サーバーに snappy または zstd を使用させることができます。これらはこの特定のヒープオーバーリードバグの影響を受けません。
コマンドラインの場合: 次のフラグを指定して mongod インスタンスを再起動します(zlib が除外されていることに注意):
mongod --networkMessageCompressors snappy,zstd
設定ファイル(mongod.conf)の場合:
net:
compression:
compressors: snappy,zstd
このツールは、教育目的および許可を得たセキュリティテスト専用です。コンピュータシステムへの無許可アクセスは違法です。作者は、このツールの誤用について一切の責任を負いません。MongoDB インスタンスは直ちに 8.2.3+ または 8.0.17+ にパッチを適用してください。
| メジャーブランチ | 推奨される安全なバージョン |
|---|
| MongoDB 8.2 | 8.2.3 以降にアップグレード |
| MongoDB 8.0 | 8.0.17 以降にアップグレード |
| MongoDB 7.0 | 7.0.28 以降にアップグレード |
| MongoDB 6.0 | 6.0.27 以降にアップグレード |
| MongoDB 5.0 | 5.0.32 以降にアップグレード |
| MongoDB 4.0 | 4.4.30 以降にアップグレード |