
Script de detección para la explotación de MongoBleed
Herramienta de análisis offline de MongoDB para CVE-2025-14847 (MongoBleed)
Una herramienta independiente de línea de comandos para Linux que analiza datos de MongoDB para identificar una posible explotación de CVE-2025-14847 mediante múltiples módulos de detección.
MongoBleed (CVE-2025-14847) es una vulnerabilidad de divulgación de memoria en la descompresión zlib de MongoDB que permite a los atacantes extraer datos sensibles (credenciales, tokens de sesión, PII) directamente de la memoria del servidor sin autenticación.
Esta herramienta ayuda a los respondedores de incidentes a detectar intentos de explotación mediante múltiples fuentes de evidencia:
Analiza los registros JSON de MongoDB para detectar patrones de explotación:
| ID de evento | Tipo | Descripción |
|---|---|---|
| 22943 | Conexión aceptada | Se registra cuando un cliente se conecta |
| 51800 | Metadatos del cliente | Se registra cuando un cliente envía información de driver/aplicación |
| 22944 | Conexión cerrada | Se registra cuando un cliente se desconecta |
Información clave: los drivers legítimos de MongoDB siempre envían metadatos del cliente. El exploit MongoBleed se conecta, extrae memoria y se desconecta, pero nunca envía metadatos.
Analiza instantáneas de db.serverStatus().asserts para detectar patrones inusuales en los contadores de asserts.user:
asserts.user con otros tipos de aserciones. Si las aserciones de usuario son desproporcionadamente altas (proporción ≥250x) o todos los demás tipos son cero, lo marca como sospechoso (confianza MEDIA)Nota: los contadores acumulativos pueden producir falsos positivos. Úselo en combinación con FTDC (módulo B2) para obtener los mejores resultados.
Analiza los archivos de captura de datos de diagnóstico de tiempo completo (FTDC) de MongoDB para detectar picos localizados en el tiempo en los contadores de aserciones. FTDC muestrea serverStatus periódicamente, lo que permite una sincronización precisa de posibles ataques.
jq: procesador JSONawk (se recomienda gawk)gzip: para soporte de registros comprimidospymongo: para decodificación de archivos FTDCssh, scp)# Dependencias del script de shell
# Debian/Ubuntu
apt-get install jq gawk gzip
# RHEL/CentOS/Fedora
dnf install jq gawk gzip
# macOS
brew install jq gawk
# Dependencias de Python (para decodificación FTDC)
pip install -r requirements.txt
# Clonar el repositorio
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector
# Hacer ejecutables los scripts
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py
# Instalar dependencias de Python (opcional, para soporte FTDC)
pip install -r requirements.txt
Analice datos que se hayan recopilado manualmente de los hosts de MongoDB.
Recopile automáticamente datos de múltiples hosts mediante SSH y luego analícelos localmente.
Recopile datos de sus hosts de MongoDB y organícelos en esta estructura:
./collected-data/
├── logs/ # Registros JSON de MongoDB
│ ├── mongod.log
│ ├── mongod.log.1
│ └── mongod.log.2.gz
├── assert-counts/ # Instantáneas de serverStatus().asserts
│ ├── asserts-2025-01-01.json
│ └── asserts-2025-01-02.json
└── ftdc-files/ # Contenido de diagnostic.data de FTDC
├── metrics.2025-01-02T10-00-00Z-00000
└── metrics.interim
# Copiar desde el host remoto
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
Ejecute este comando en el host de MongoDB (requiere acceso 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
Copie el archivo JSON resultante a ./collected-data/assert-counts/.
Consejo: ejecute este comando varias veces (por ejemplo, cada hora) para establecer una línea base y detectar picos.
Los archivos FTDC se encuentran en:
<storage.dbPath>/diagnostic.data/ (comúnmente /var/lib/mongodb/diagnostic.data/)systemLog.path (p. ej., /var/log/mongodb/mongos.diagnostic.data/)# Copiar archivos FTDC (puede requerir sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/
# Modo de autodescubrimiento: analiza todos los datos disponibles
./mongobleed-detector.sh --data-dir ./collected-data/
# Con umbrales personalizados
./mongobleed-detector.sh --data-dir ./collected-data/ \
-t 1440 \ # Ventana de retroceso de 24 horas
-c 50 \ # Umbral de conexión más bajo
--spike-threshold 50 # Umbral de pico más bajo
Para compatibilidad con versiones anteriores, aún puede analizar registros directamente:
# Escanear rutas predeterminadas
./mongobleed-detector.sh
# Escanear archivos de registro específicos
./mongobleed-detector.sh -p /path/to/logs/*.json
# Modo forense (analizar múltiples hosts)
./mongobleed-detector.sh --forensic-dir /evidence/
Recopile automáticamente datos de múltiples hosts y analícelos:
# Crear archivo de hosts
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF