CVE-2026-34751: Fallo Crítico en Payload CMS Permite Tomar el Control de Cuentas Sin Contraseña
Una vulnerabilidad CVSS 9.1 en Payload CMS anterior a 3.79.1 permite la toma de control de cuentas sin autenticación mediante inyección de encabezado Host y bypass de coincidencia parcial de tokens. Actualiza de inmediato.
Si usas Payload CMS, para de leer y actualiza a la versión 3.79.1 ahora. Luego vuelve.
CVE-2026-34751 es una vulnerabilidad crítica (CVSS 9.1) en Payload, el CMS headless de código abierto muy utilizado en proyectos con Next.js. El fallo reside en el flujo de recuperación de contraseña, en el endpoint /api/{collection-slug}/forgot-password, que está intencionalmente expuesto a peticiones no autenticadas por diseño. Esa decisión de diseño, combinada con dos bugs de implementación, abre un camino hacia la toma de control total de cuentas sin necesidad de conocer la contraseña del objetivo.
Dos bugs, un resultado crítico
El primer vector es la inyección de encabezado Host. Cuando Payload genera el email de restablecimiento de contraseña, construye el enlace usando el encabezado Host de la petición HTTP entrante. Un atacante puede falsificar ese encabezado para apuntar a un dominio bajo su control. La víctima hace clic en lo que parece un enlace legítimo, el token queda capturado y el atacante se apropia de la sesión. Este vector requiere interacción del usuario.
El segundo vector es más grave porque no requiere nada de la víctima. Los adaptadores de base de datos de Payload (MongoDB, Postgres y SQLite) realizan comparaciones de tokens usando coincidencia parcial en lugar de igualdad exacta. Un atacante que envíe los primeros caracteres de un token tiene posibilidades reales de superar la validación y completar el restablecimiento. Sumado a esto, el agotamiento de joins polimórficos permite un DoS localizado en el servicio de autenticación al inundar el endpoint con solicitudes masivas, dificultando los restablecimientos legítimos mientras el atacante itera hacia una coincidencia válida.
Versiones afectadas
Todas las versiones de Payload desde el inicio de la línea 3.x hasta la 3.79.0 están afectadas. Esto incluye payload (npm) y @payloadcms/graphql. La rama 2.x no ha sido evaluada específicamente para esta cadena de ataque.
Cómo solucionarlo
Actualiza a payload@3.79.1. El parche refuerza el endpoint de restablecimiento de tres formas: reemplaza el encabezado Host con el serverURL configurado en el servidor, cambia las comparaciones de tokens a igualdad exacta en tiempo constante, y limita correctamente los joins polimórficos para evitar el agotamiento.
npm install payload@3.79.1
# o
bun add payload@3.79.1
Si no puedes actualizar de inmediato, añade una capa de middleware que fuerce un encabezado Host estático antes de que las peticiones lleguen al router de Payload, y aplica rate-limiting agresivo a /api/*/forgot-password (5 peticiones por minuto por IP es razonable).
El contexto más amplio
Payload ha experimentado un auge de adopción como CMS nativo en TypeScript con sólida integración con Next.js. Esa popularidad hace que CVE-2026-34751 tenga un impacto elevado. El endpoint de recuperación de contraseña es el objetivo canónico para la toma de cuentas en cualquier aplicación web: suele estar menos endurecido que el flujo de login precisamente porque se percibe como mecanismo de seguridad y no como superficie de ataque.
Comprueba tu versión, ejecuta la actualización y revisa la configuración de rate-limiting en tus endpoints de autenticación mientras estás en ello.
Lecturas relacionadas
- Ciberseguridad CVE-2026-34875: Desbordamiento de Búfer CVSS 9.8 en Mbed TLS Permite Ejecución Remota de Código
- Ciberseguridad CISA alerta de un fallo de N-able N-central explotado activamente tras la brecha en clientes de MSPs
- Ciberseguridad Meta es el tercer laboratorio de IA en semanas que admite que un modelo se escapó y hackeó una empresa