
MongoDB CVE-2025-14847 Escáner de Fuga de Memoria Heap | Vulnerabilidad OP_COMPRESSED zlib | Bug Bounty y Herramienta de Red Team
MongoBleed es un escáner PoC de alto rendimiento para CVE-2025-14847, una vulnerabilidad de divulgación de memoria heap previa a la autenticación en el controlador C++ de MongoDB. La herramienta está diseñada para la identificación rápida de instancias vulnerables en grandes rangos de red.
La vulnerabilidad proviene de una lectura fuera de los límites (OOB) en el manejo de mensajes OP_COMPRESSED del protocolo wire de MongoDB.
Cuando un servidor recibe un paquete OP_COMPRESSED, confía en el campo uncompressedSize proporcionado por el atacante para asignar un búfer para la descompresión. Si los datos descomprimidos reales son significativamente más pequeños que el uncompressedSize declarado, el controlador no trunca ni limpia el búfer. Como resultado, el servidor devuelve todo el bloque de memoria asignado, que puede contener datos de heap no inicializados, exponiendo potencialmente información sensible como tokens de sesión, punteros internos o fragmentos de otras consultas de la base de datos.
asyncio para escaneo de alta concurrenciavulnerable_targets.txtgit clone https://github.com/Black1hp/mongobleed-scanner/
cd mongobleed-scanner
No se requieren dependencias externas (solo biblioteca estándar de Python).
Uso básico:
python3 mongobleed.py -i targets.txt
Configuración avanzada:
python3 mongobleed.py -i targets.txt -c 100 -t 5
-i : Archivo de entrada que contiene los objetivos (IP, dominio o IP:puerto)-c : Nivel de concurrencia (por defecto: 50)-t : Tiempo de espera de conexión en segundos (por defecto: 5)El escáner identifica la vulnerabilidad explotando un desajuste de tamaño durante la fase de descompresión BSON:
OP_COMPRESSED manipulado que contiene una pequeña carga útil comprimida con zlib, por ejemplo de 16-30 bytes .uncompressedSize en el encabezado del paquete se establece intencionalmente a un valor mucho mayor (por ejemplo, 64KB).MessageLength que coincide con el tamaño grande del búfer solicitado en lugar del tamaño real de la carga útil descomprimida.uncompressedSize proporcionado por el atacante para definir la longitud de la respuesta. Dado que no actualiza esta longitud con los bytes reales escritos durante la descompresión, transmite ciegamente todo el búfer de heap asignado (incluyendo la memoria no inicializada) de vuelta al cliente.Nota: El video anterior demuestra el escáner identificando múltiples instancias vulnerables y capturando fragmentos de heap en tiempo real.
Black1hp Investigador de Seguridad | Cazador de Bugs | Red Teamer
Esta herramienta está destinada únicamente para pruebas de seguridad autorizadas y fines de investigación. El autor no se hace responsable por cualquier uso no autorizado o daño resultante del uso de esta herramienta.