CVE-2025-14847 — MongoBleed
- CVE-2025-14847 (MongoBleed) утекает heap-память сервера MongoDB без аутентификации.
- Первопричина — доверие к присланному клиентом uncompressedSize при распаковке OP_COMPRESSED.
- Утёкшая память может раскрыть логины, пароли, токены и конфигурацию; обновитесь до исправленных версий.
CVE-2025-14847, также известная как MongoBleed, — это уязвимость, которая позволяет злоумышленникам без какой-либо аутентификации несанкционированно читать данные из кучи (heap) памяти сервера, на котором работает MongoDB.
MongoDB — это документоориентированная NoSQL база данных с открытым исходным кодом. Она хранит данные в форматах, таких как JSON, BSON и XML, и поддерживает операции поиска, удаления и обновления над этими данными.
Предпосылки
MongoDB использует основанный на сокетах протокол под названием MongoDB Wire Protocol между клиентом и сервером. После установления соединения обмен происходит путём отправки и приёма пакетов сообщений OP_MSG. Для производительной передачи больших полезных нагрузок MongoDB использует формат пакетов OP_COMPRESSED.
Значимый параметр — это uncompressedSize: «размер, который сжатые данные, отправленные от клиента к серверу, займут в памяти после их распаковки на сервере».
Первопричина
// line 72 — client value assigned to length length = uncompressedSize; // line 73 — uncompress computes the real size into length uncompress(output.data(), &length, input.data(), input.size()); // line 83 — ROOT CAUSE // length was updated, but output.length() still returns the client's size! return SharedBuffer::allocate(output.length());
Внутри decompressData память выделяется в соответствии с предоставленным клиентом значением uncompressedSize. Данные читаются из кучи сервера в размере, выбранном клиентом, и возвращаются клиенту так, будто это результат распаковки. Утёкшая память может содержать имена пользователей, пароли, токены и данные конфигурации системы.
Утечка BSON
Объекты в MongoDB сериализуются/десериализуются клиенту в BSON (Binary JSON). При разборе конец значения определяется нулевым терминатором \0. Когда предоставленный клиентом BSON не заканчивается на \0, Mongo продолжает сканировать выделенную область в его поисках. Поскольку корректный объект BSON не формируется, возникает ошибка — и это сообщение об ошибке приводит к утечке содержимого памяти.
Исправление
Уязвимость была устранена за счёт использования во время операции decompressData реальной длины распакованных данных, а не значения, предоставленного клиентом.
- 8.2.x — 8.2.2 и ранее
- 8.0.x — 8.0.16 и ранее
- 7.0.x — 7.0.27 и ранее
- 6.0.x — 6.0.26 и ранее
- 5.0.x — 5.0.31 и ранее
Часто задаваемые вопросы
Что такое MongoBleed (CVE-2025-14847)?
Неаутентифицированная утечка heap-памяти в MongoDB. Отправив специально составленный пакет OP_COMPRESSED, злоумышленник заставляет сервер вернуть больше памяти, чем нужно, и содержимое heap — учётные данные, токены — утекает клиенту.
Какие версии MongoDB затронуты и как это исправить?
Затронуты версии до 8.2.2, 8.0.16, 7.0.27, 6.0.26 и 5.0.31. Исправление использует реальную длину после распаковки вместо значения клиента; обновление до пропатченной версии закрывает утечку.

