
Erkennungsskript für MongoBleed-Ausnutzung
Offline MongoDB-Analyse-Tool für CVE-2025-14847 (MongoBleed)
Ein eigenständiges Linux-Kommandozeilen-Tool, das MongoDB-Daten analysiert, um eine wahrscheinliche Ausnutzung von CVE-2025-14847 mithilfe mehrerer Erkennungsmodule zu identifizieren.
MongoBleed (CVE-2025-14847) ist eine Schwachstelle zur Offenlegung von Speicherinhalten in der zlib-Dekomprimierung von MongoDB, die es Angreifern ermöglicht, sensible Daten – Anmeldeinformationen, Sitzungstoken, personenbezogene Daten (PII) – direkt aus dem Serverspeicher auszulesen, ohne sich zu authentifizieren.
Dieses Tool hilft Incident-Respondern, Ausnutzungsversuche mithilfe mehrerer Beweisquellen zu erkennen:
Analysiert MongoDB-JSON-Logs, um Ausnutzungsmuster zu erkennen:
| Ereignis-ID | Typ | Beschreibung |
|---|---|---|
| 22943 | Verbindung akzeptiert | Wird protokolliert, wenn ein Client eine Verbindung herstellt |
| 51800 | Client-Metadaten | Wird protokolliert, wenn ein Client Treiber-/Anwendungsinfo sendet |
| 22944 | Verbindung geschlossen | Wird protokolliert, wenn ein Client die Verbindung trennt |
Wichtige Erkenntnis: Legitime MongoDB-Treiber senden immer Client-Metadaten. Der MongoBleed-Exploit stellt eine Verbindung her, extrahiert Speicher und trennt die Verbindung – sendet jedoch niemals Metadaten.
Analysiert Momentaufnahmen von db.serverStatus().asserts, um ungewöhnliche Muster in den asserts.user-Zählern zu erkennen:
asserts.user mit anderen Assert-Typen. Wenn Benutzer-Asserts überproportional hoch sind (Verhältnis ≥250x) oder alle anderen Typen null sind, wird dies als verdächtig eingestuft (MEDIUM-Vertrauen).Hinweis: Kumulative Zähler können falsch positive Ergebnisse liefern. Für beste Ergebnisse in Kombination mit FTDC (Modul B2) verwenden.
Analysiert die Full-Time Diagnostic Data Capture (FTDC)-Dateien von MongoDB, um zeitlich lokalisierte Spitzen in Assert-Zählern zu erkennen. FTDC testet serverStatus regelmäßig, was eine präzise zeitliche Zuordnung möglicher Angriffe ermöglicht.
jq – JSON-Prozessorawk (gawk empfohlen)gzip – Für unterstützte komprimierte Logspymongo – Für FTDC-Dateidekodierungssh, scp-Befehle)# Shell script dependencies
# Debian/Ubuntu
apt-get install jq gawk gzip
# RHEL/CentOS/Fedora
dnf install jq gawk gzip
# macOS
brew install jq gawk
# Python dependencies (for FTDC decoding)
pip install -r requirements.txt
# Clone the repository
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector
# Make scripts executable
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py
# Install Python dependencies (optional, for FTDC support)
pip install -r requirements.txt
Analysiert Daten, die manuell von MongoDB-Hosts gesammelt wurden.
Sammelt automatisch Daten von mehreren Hosts per SSH und analysiert sie dann lokal.
Sammeln Sie Daten von Ihren MongoDB-Hosts und organisieren Sie sie in dieser Struktur:
./collected-data/
├── logs/ # MongoDB-JSON-Logs
│ ├── mongod.log
│ ├── mongod.log.1
│ └── mongod.log.2.gz
├── assert-counts/ # serverStatus().asserts-Momentaufnahmen
│ ├── asserts-2025-01-01.json
│ └── asserts-2025-01-02.json
└── ftdc-files/ # FTDC diagnostic.data-Inhalte
├── metrics.2025-01-02T10-00-00Z-00000
└── metrics.interim
# Copy from remote host
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
Führen Sie diesen Befehl auf dem MongoDB-Host aus (erfordert mongosh-Zugriff):
mongosh --quiet --eval 'JSON.stringify({
timestamp: new Date().toISOString(),
hostname: db.hostInfo().system.hostname,
asserts: db.serverStatus().asserts,
uptime: db.serverStatus().uptime
})' > asserts-$(date +%Y%m%d-%H%M%S).json
Kopieren Sie die resultierende JSON-Datei nach ./collected-data/assert-counts/.
Tipp: Führen Sie diesen Befehl mehrmals aus (z. B. stündlich), um eine Basislinie zu erstellen und Spitzen zu erkennen.
FTDC-Dateien befinden sich unter:
<storage.dbPath>/diagnostic.data/ (üblich /var/lib/mongodb/diagnostic.data/)systemLog.path (z. B. /var/log/mongodb/mongos.diagnostic.data/)# Copy FTDC files (may require sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/
# Auto-discovery mode - analyzes all available data
./mongobleed-detector.sh --data-dir ./collected-data/
# With custom thresholds
./mongobleed-detector.sh --data-dir ./collected-data/ \
-t 1440 \ # 24-hour lookback
-c 50 \ # Lower connection threshold
--spike-threshold 50 # Lower spike threshold
Aus Gründen der Rückwärtskompatibilität können Sie Logs auch direkt analysieren:
# Scan default paths
./mongobleed-detector.sh
# Scan specific log files
./mongobleed-detector.sh -p /path/to/logs/*.json
# Forensic mode (analyze multiple hosts)
./mongobleed-detector.sh --forensic-dir /evidence/
Sammelt automatisch Daten von mehreren Hosts und analysiert sie:
# Create hosts file
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF
# Collect and analyze
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/
# Use specific SSH key
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key
# Parallel execution
./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10