
MongoBleed は、CVE-2025-14847(MongoDB C++ ドライバーにおける認証前のヒープメモリ開示脆弱性)のための高性能 PoC スキャナーです。 このツールは、大規模なネットワーク範囲にわたる脆弱なインスタンスの迅速な特定のために設計されています。
この脆弱性は、MongoDB ワイヤープロトコルにおける OP_COMPRESSED メッセージの処理での範囲外読み取り (OOB) に起因します。
サーバーが OP_COMPRESSED パケットを受信すると、攻撃者が指定した uncompressedSize フィールドに依存して展開用のバッファを割り当てます。実際の展開済みデータが宣言された uncompressedSize よりも大幅に小さい場合、ドライバーはバッファを切り詰めたりクリアしたりしません。その結果、サーバーは割り当てられたメモリブロック全体を返却し、未初期化のヒープデータが含まれる可能性があります。これにより、セッショントークン、内部ポインタ、他のデータベースクエリの断片などの機密情報が漏洩する可能性があります。
asyncio を使用した非同期 I/O による高並列スキャンvulnerable_targets.txt への自動ログ記録git clone https://github.com/Black1hp/mongobleed-scanner/
cd mongobleed-scanner
外部依存関係は不要です(Python 標準ライブラリのみ)。
基本的な使用方法:
python3 mongobleed.py -i targets.txt
高度な設定:
python3 mongobleed.py -i targets.txt -c 100 -t 5
-i : ターゲットを含む入力ファイル(IP、ドメイン、または IP:ポート)-c : 並列数(デフォルト: 50)-t : 接続タイムアウト(秒)(デフォルト: 5)スキャナーは、BSON 展開フェーズ中のサイズ不一致を悪用して脆弱性を特定します。
OP_COMPRESSED パケットを送信します。uncompressedSize フィールドは意図的にはるかに大きな値(例:64KB)に設定されます。MessageLength で応答した場合、VULNERABLE 状態が確認されます。uncompressedSize を信頼して応答長を決定します。展開中に書き込まれた実際のバイトでこの長さを更新しないため、未初期化メモリを含む割り当てられたヒープバッファ全体をクライアントに盲目的にストリーミングします。注: 上記のビデオは、スキャナーが複数の脆弱なインスタンスを特定し、ヒープ断片をリアルタイムでキャプチャする様子を示しています。
Black1hp セキュリティ研究者 | バグハンター | レッドチーマー
このツールは、認可されたセキュリティテストおよび研究目的のみを対象としています。 著者は、このツールの不正使用またはこれに起因する損害について一切の責任を負いません。