
Script di rilevamento per lo sfruttamento di MongoBleed
Strumento di analisi MongoDB offline per CVE-2025-14847 (MongoBleed)
Un tool standalone da riga di comando per Linux che analizza i dati di MongoDB per identificare probabili sfruttamenti di CVE-2025-14847 utilizzando molteplici moduli di rilevamento.
MongoBleed (CVE-2025-14847) è una vulnerabilità di divulgazione della memoria nella decompressione zlib di MongoDB che consente agli aggressori di estrarre dati sensibili—credenziali, token di sessione, PII—direttamente dalla memoria del server senza autenticazione.
Questo strumento aiuta i responder agli incidenti a rilevare tentativi di sfruttamento utilizzando molteplici fonti di prova:
Analizza i log JSON di MongoDB per rilevare schemi di sfruttamento:
| ID evento | Tipo | Descrizione |
|---|---|---|
| 22943 | Connessione accettata | Registrato quando un client si connette |
| 51800 | Metadati client | Registrato quando un client invia informazioni driver/ applicazione |
| 22944 | Connessione chiusa | Registrato quando un client si disconnette |
Intuizione chiave: I driver MongoDB legittimi inviano sempre i metadati del client. L'exploit MongoBleed si connette, estrae memoria e si disconnette—ma non invia mai metadati.
Analizza le istantanee di db.serverStatus().asserts per rilevare schemi insoliti nei contatori asserts.user:
asserts.user con altri tipi di asserzione. Se le asserzioni utente sono sproporzionatamente alte (rapporto ≥250x) o tutti gli altri tipi sono zero, viene segnalato come sospetto (confidenza MEDIA)Nota: I contatori cumulativi possono produrre falsi positivi. Da utilizzare in combinazione con FTDC (Modulo B2) per risultati ottimali.
Analizza i file di Full-Time Diagnostic Data Capture (FTDC) di MongoDB per rilevare picchi localizzati nel tempo nei contatori di asserzioni. FTDC campiona serverStatus periodicamente, consentendo una tempistica precisa di potenziali attacchi.
jq - Processore JSONawk (gawk raccomandato)gzip - Per il supporto di log compressipymongo - Per la decodifica dei file FTDCssh, scp)# Dipendenze dello script shell
# Debian/Ubuntu
apt-get install jq gawk gzip
# RHEL/CentOS/Fedora
dnf install jq gawk gzip
# macOS
brew install jq gawk
# Dipendenze Python (per decodifica FTDC)
pip install -r requirements.txt
# Clona il repository
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector
# Rendi eseguibili gli script
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py
# Installa le dipendenze Python (opzionale, per supporto FTDC)
pip install -r requirements.txt
Analizza i dati raccolti manualmente dagli host MongoDB.
Raccoglie automaticamente dati da più host tramite SSH, poi analizza localmente.
Raccogli i dati dai tuoi host MongoDB e organizzali in questa struttura:
./collected-data/
├── logs/ # Log JSON di MongoDB
│ ├── mongod.log
│ ├── mongod.log.1
│ └── mongod.log.2.gz
├── assert-counts/ # Istanze di serverStatus().asserts
│ ├── asserts-2025-01-01.json
│ └── asserts-2025-01-02.json
└── ftdc-files/ # Contenuti di diagnostic.data FTDC
├── metrics.2025-01-02T10-00-00Z-00000
└── metrics.interim
# Copia da host remoto
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
Esegui questo comando sull'host MongoDB (richiede accesso a mongosh):
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
Copia il file JSON risultante in ./collected-data/assert-counts/.
Suggerimento: Esegui questo comando più volte (ad esempio, ogni ora) per stabilire una baseline e rilevare picchi.
I file FTDC si trovano in:
<storage.dbPath>/diagnostic.data/ (comunemente /var/lib/mongodb/diagnostic.data/)systemLog.path (es. /var/log/mongodb/mongos.diagnostic.data/)# Copia file FTDC (potrebbe richiedere sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/
# Modalità auto-scoperta - analizza tutti i dati disponibili
./mongobleed-detector.sh --data-dir ./collected-data/
# Con soglie personalizzate
./mongobleed-detector.sh --data-dir ./collected-data/ \
-t 1440 \ # Finestra di 24 ore
-c 50 \ # Soglia connessioni più bassa
--spike-threshold 50 # Soglia picco più bassa
Per compatibilità con versioni precedenti, puoi ancora analizzare i log direttamente:
# Scansiona percorsi predefiniti
./mongobleed-detector.sh
# Scansiona file di log specifici
./mongobleed-detector.sh -p /percorso/dei/log/*.json
# Modalità forense (analizza più host)
./mongobleed-detector.sh --forensic-dir /prove/
Raccogli automaticamente dati da più host e analizza:
# Crea file hosts
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF
# Raccogli e analizza
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/
# Usa una chiave SSH specifica
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key