CVE-2025-23061 - Inyección de comandos en Mongoose
Una prueba de concepto para la vulnerabilidad de inyección de comandos en Mongoose < 8.9.5 que afecta a la opción match de la función populate().
Detalles de la vulnerabilidad
ID de CVE: CVE-2025-23061
Gravedad: CRÍTICA (CVSS 9.0)
Paquete afectado: mongoose
Versiones vulnerables:
- < 6.13.6
-
= 7.0.0 < 7.8.4
-
= 8.0.0 < 8.9.5
Cronología de CVE-2024-53900 y CVE-2025-23061
- 7 de noviembre de 2024: Dat Phung identificó una vulnerabilidad crítica en Mongoose y envió un informe de seguridad a Snyk.
- 26 de noviembre de 2024: Mongoose publicó la versión 8.8.3 para abordar y corregir esta vulnerabilidad.
- 2 de diciembre de 2024: La Base de Datos Nacional de Vulnerabilidades (NVD) reveló el CVE-2024-53900 para esta vulnerabilidad.
- 17 de diciembre de 2024: Al analizar el parche 8.8.3 de Mongoose, Dat Phung encontró una evasión que aún permitía la ejecución remota de código (RCE). Se envió un informe de seguridad detallado a Tidelift.
- 13 de enero de 2025: Mongoose publicó la versión 8.9.5, que introduce un parche mejorado que aborda eficazmente la evasión.
- 15 de enero de 2025: La Base de Datos Nacional de Vulnerabilidades (NVD) reveló oficialmente el CVE-2025-23061, destacando la gravedad de la vulnerabilidad recientemente identificada.
Causa raíz
Esta vulnerabilidad existe debido a una corrección incompleta del CVE-2024-53900. Aunque la inyección directa con $where está bloqueada, los atacantes pueden evadir esta protección anidando operadores $where dentro de operadores lógicos como $and, $or, etc.
La ruta de código vulnerable:
- El usuario proporciona entrada a través del parámetro match de
populate()
- La aplicación usa la entrada de usuario sin saneamiento directamente en la consulta match
- Mongoose no sanea
$where cuando está anidado dentro de operadores lógicos
- El atacante ejecuta JavaScript arbitrario en el servidor MongoDB
Impacto
- Divulgación de información: Acceder a datos sensibles sin la autorización adecuada
- Evasión de autenticación: Recuperar información exclusiva de administradores
- Ejecución de código arbitrario: Ejecutar JavaScript en el servidor MongoDB
- Modificación de datos: Posibilidad de modificar registros de la base de datos
Configuración y ejecución del PoC
Requisitos previos
- Node.js >= 14
- MongoDB ejecutándose localmente o accesible mediante una cadena de conexión
Instalación
# Instalar dependencias
npm install
# Opcional: Usar una URI específica de MongoDB
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
Ejecutar el servidor vulnerable
El servidor se iniciará en http://localhost:3000
Ejecutar el exploit
En otra terminal:
Referencias
Aviso legal
Este PoC se proporciona únicamente con fines educativos. El acceso no autorizado a sistemas informáticos es ilegal. Úselo solo en sistemas que le pertenezcan o para los que tenga permiso explícito de prueba.