
Script de détection pour l'exploitation de MongoBleed
Outil d'analyse MongoDB hors ligne pour CVE-2025-14847 (MongoBleed)
Un outil Linux autonome en ligne de commande qui analyse les données MongoDB afin d'identifier une exploitation probable de CVE-2025-14847 à l'aide de multiples modules de détection.
MongoBleed (CVE-2025-14847) est une vulnérabilité de divulgation de mémoire dans la décompression zlib de MongoDB qui permet aux attaquants d'extraire des données sensibles — identifiants, jetons de session, données personnelles — directement depuis la mémoire du serveur sans authentification.
Cet outil aide les répondants aux incidents à détecter les tentatives d'exploitation à partir de multiples sources de preuves :
Analyse les journaux JSON MongoDB pour détecter les schémas d'exploitation :
| ID d'événement | Type | Description |
|---|---|---|
| 22943 | Connexion acceptée | Journalisé lorsqu'un client se connecte |
| 51800 | Métadonnées client | Journalisé lorsqu'un client envoie les informations pilote/application |
| 22944 | Connexion fermée | Journalisé lorsqu'un client se déconnecte |
Point clé : Les pilotes MongoDB légitimes envoient toujours des métadonnées client. L'exploit MongoBleed se connecte, extrait la mémoire et se déconnecte — mais n'envoie jamais de métadonnées.
Analyse les instantanés de db.serverStatus().asserts pour détecter des schémas inhabituels dans les compteurs asserts.user :
asserts.user aux autres types d'assertions. Si les assertions utilisateur sont disproportionnellement élevées (ratio ≥250x) ou si tous les autres types sont à zéro, signale comme suspect (confiance MOYENNE)Remarque : Les compteurs cumulés peuvent produire des faux positifs. À utiliser en combinaison avec FTDC (module B2) pour de meilleurs résultats.
Analyse les fichiers de capture de données de diagnostic en continu (FTDC) de MongoDB pour détecter des pics localisés dans le temps des compteurs d'assertions. FTDC échantillonne l'état du serveur périodiquement, permettant un minutage précis des attaques potentielles.
jq - Processeur JSONawk (gawk recommandé)gzip - Pour la prise en charge des journaux compresséspymongo - Pour le décodage des fichiers FTDCssh, scp)# 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
Analysez les données collectées manuellement à partir des hôtes MongoDB.
Collectez automatiquement les données de plusieurs hôtes via SSH, puis analysez-les localement.
Collectez les données de vos hôtes MongoDB et organisez-les selon cette structure :
./collected-data/
├── logs/ # MongoDB JSON logs
│ ├── mongod.log
│ ├── mongod.log.1
│ └── mongod.log.2.gz
├── assert-counts/ # serverStatus().asserts snapshots
│ ├── asserts-2025-01-01.json
│ └── asserts-2025-01-02.json
└── ftdc-files/ # FTDC diagnostic.data contents
├── metrics.2025-01-02T10-00-00Z-00000
└── metrics.interim
# Copy from remote host
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
Exécutez cette commande sur l'hôte MongoDB (nécessite un accès 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
Copiez le fichier JSON résultant dans ./collected-data/assert-counts/.
Astuce : Exécutez cette commande plusieurs fois (par exemple, toutes les heures) pour établir une référence et détecter les pics.
Les fichiers FTDC se trouvent à :
<storage.dbPath>/diagnostic.data/ (généralement /var/lib/mongodb/diagnostic.data/)systemLog.path (par exemple, /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
Pour la compatibilité ascendante, vous pouvez toujours analyser les journaux directement :
# 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/
Collectez automatiquement les données de plusieurs hôtes et analysez-les :
# Create hosts file
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF