
Scanner per perdita di memoria heap MongoDB CVE-2025-14847 | Vulnerabilità zlib OP_COMPRESSED | Strumento per Bug Bounty e Red Team
MongoBleed è uno scanner PoC ad alte prestazioni per CVE-2025-14847, una vulnerabilità di divulgazione di memoria heap pre-autenticazione nel driver C++ di MongoDB. Lo strumento è progettato per l'identificazione rapida di istanze vulnerabili su ampi intervalli di rete.
La vulnerabilità deriva da una lettura fuori dai limiti (OOB) nella gestione dei messaggi OP_COMPRESSED da parte del protocollo wire di MongoDB.
Quando un server riceve un pacchetto OP_COMPRESSED, si basa sul campo uncompressedSize fornito dall'attaccante per allocare un buffer per la decompressione. Se i dati decompressi effettivi sono significativamente più piccoli della uncompressedSize dichiarata, il driver non tronca né cancella il buffer. Di conseguenza, il server restituisce l'intero blocco di memoria allocato, che può contenere dati heap non inizializzati, esponendo potenzialmente informazioni sensibili come token di sessione, puntatori interni o frammenti di altre query del database.
asyncio per scansione ad alta concorrenzavulnerable_targets.txtgit clone https://github.com/Black1hp/mongobleed-scanner/
cd mongobleed-scanner
Nessuna dipendenza esterna richiesta (solo libreria standard Python).
Utilizzo base:
python3 mongobleed.py -i targets.txt
Configurazione avanzata:
python3 mongobleed.py -i targets.txt -c 100 -t 5
-i : File di input contenente i target (IP, dominio o IP:porta)-c : Livello di concorrenza (default: 50)-t : Timeout di connessione in secondi (default: 5)Lo scanner identifica la vulnerabilità sfruttando una discrepanza di dimensioni durante la fase di decompressione BSON:
OP_COMPRESSED appositamente costruito contenente un piccolo payload compresso con zlib, ad esempio 16-30 byte .uncompressedSize nell'intestazione del pacchetto è impostato intenzionalmente a un valore molto più grande (es., 64KB).MessageLength che corrisponde alla grande dimensione del buffer richiesto piuttosto che alla dimensione effettiva del payload decompresso.uncompressedSize fornita dall'attaccante per definire la lunghezza della risposta. Poiché non aggiorna questa lunghezza con i byte effettivi scritti durante la decompressione, trasmette ciecamente l'intero buffer heap allocato—inclusa la memoria non inizializzata—di nuovo al client.Nota: Il video sopra dimostra lo scanner che identifica più istanze vulnerabili e cattura frammenti di heap in tempo reale.
Black1hp Ricercatore di Sicurezza | Cacciatore di Bug | Red Teamer
Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e scopi di ricerca. L'autore non è responsabile per qualsiasi uso non autorizzato o danno derivante da questo strumento.