
MongoBleed: CVE-2025-14847 Инструмент для обнаружения утечек памяти
MongoBleed — это высокопроизводительный инструмент для аудита безопасности, предназначенный для обнаружения и демонстрации CVE-2025-14847. Эта уязвимость позволяет неаутентифицированному удаленному злоумышленнику сливать фрагменты неинициализированной памяти кучи с сервера MongoDB, используя ошибку несоответствия длины в логике декомпрессии zlib.
Чтобы безопасно протестировать этот скрипт, используйте следующий docker-compose.yml для запуска уязвимого экземпляра MongoDB 8.2.2.
Запустите экземпляр с помощью:
docker-compose up -d
Убедитесь, что у вас установлен Python 3.8 или новее. Внешние библиотеки не требуются (используются встроенные socket, zlib и concurrent.futures).
Базовое сканирование
python mongobleed.py --host 127.0.0.1 --port 27017
Расширенные параметры
python mongobleed.py --host 127.0.0.1 --threads 50 --range 100 10000 --output leak_dump.bin
Скрипт отправляет специально сформированное сообщение OP_COMPRESSED (opcode 2012). Он искажает фактическую длину несжатых данных. Сервер MongoDB выделяет буфер кучи размером, указанным в "лживых" данных, декомпрессирует в него крошечный объем данных, а затем ошибочно возвращает весь неинициализированный буфер обратно клиенту.
Единственный постоянный способ устранения CVE-2025-14847 — это обновление бинарного файла MongoDB до версии, включающей исправление логики проверки длины OP_COMPRESSED.
Постоянное исправление (обновление)
Примените официальные исправления от MongoDB. Эти версии включают обязательную проверку, гарантирующую, что размер декомпрессированных данных соответствует полю uncompressedSize в заголовке сообщения.
Если немедленное обновление невозможно из-за требований к непрерывной работе, вы можете заблокировать вектор атаки, изменив конфигурацию сервера.
Отключение уязвимого компрессора (рекомендуется)
Уязвимость характерна для реализации zlib. Вы можете отключить zlib и заставить сервер использовать snappy или zstd, которые не подвержены этой конкретной ошибке чтения за пределами кучи.
Через командную строку: Перезапустите экземпляр mongod с помощью следующего флага (обратите внимание на исключение zlib):
mongod --networkMessageCompressors snappy,zstd
Через файл конфигурации (mongod.conf):
net:
compression:
compressors: snappy,zstd
Этот инструмент предназначен только для образовательных и авторизованных тестов безопасности. Несанкционированный доступ к компьютерным системам незаконен. Автор не несет ответственности за любое неправомерное использование этого инструмента. Немедленно обновите ваши экземпляры MongoDB до версий 8.2.3+ или 8.0.17+.
| Основная ветка | Рекомендуемая безопасная версия |
|---|
| MongoDB 8.2 | Обновление до 8.2.3 или новее |
| MongoDB 8.0 | Обновление до 8.0.17 или новее |
| MongoDB 7.0 | Обновление до 7.0.28 или новее |
| MongoDB 6.0 | Обновление до 6.0.27 или новее |
| MongoDB 5.0 | Обновление до 5.0.32 или новее |
| MongoDB 4.0 | Обновление до 4.4.30 или новее |