CVE-2026-39397: qué sistemas afecta y cómo parchear

El CVE-2026-39397 es una vulnerabilidad crítica de bypass de control de acceso en el plugin @delmaredigital/payload-puck para PayloadCMS, con una puntuación CVSS de 9.4. Analizamos en detalle esta vulnerabilidad CVE-2026-39397 payload-puck, que permite a cualquier atacante remoto, sin autenticación, ejecutar operaciones CRUD en los endpoints del constructor visual Puck, ignorando por completo las reglas de acceso definidas en las colecciones.

📋 Ficha técnica

CVE ID CVE-2026-39397
Severidad (CVSS) 9.4 – CRÍTICA
Vector CVSS CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
Productos afectados Plugin @delmaredigital/payload-puck para PayloadCMS (versiones anteriores a 0.6.23)
Exploit público No
Fecha publicación 2026-04-07
⚠️ ALERTA DE SEGURIDAD: Aunque no se ha confirmado un exploit público activo, la severidad crítica de este fallo y su fácil explotación (requiere solo peticiones HTTP a endpoints expuestos) obligan a aplicar el parche de inmediato.

Puntos clave sobre la vulnerabilidad CVE-2026-39397 en payload-puck

  • Gravedad extrema: Puntuación CVSS 9.4, clasificada como crítica.
  • Vector de ataque: Remoto, sin necesidad de autenticación ni interacción del usuario.
  • Impacto: Confidencialidad e integridad comprometidas (C:H/I:H), permitiendo lectura, creación, modificación y eliminación de contenidos sin autorización.
  • Ámbito: Afecta exclusivamente a proyectos PayloadCMS que utilicen el plugin @delmaredigital/payload-puck en versiones vulnerables.
  • Remediación: Actualizar a la versión 0.6.23 o superior del plugin.

¿En qué consiste la vulnerabilidad CVE-2026-39397 en payload-puck?

El fallo reside en la función createPuckPlugin() del plugin. Todos los handlers de los endpoints CRUD bajo la ruta /api/puck/* llamaban a la API local de PayloadCMS con el parámetro overrideAccess: true por defecto. Este parámetro, según la documentación de Payload, omite por completo cualquier control de acceso definido a nivel de colección. vulnerabilidad CVE-2026-39397 payload-puck es clave para entender el alcance de esta amenaza.

En la práctica, esto significa que las reglas de acceso (access) que un desarrollador configure al registrar colecciones con Puck, o las pasadas como opción al propio plugin, eran silenciosamente ignoradas. Un atacante remoto podría, por tanto, interactuar con estos endpoints como si tuviera privilegios administrativos totales. vulnerabilidad CVE-2026-39397 payload-puck es clave para entender el alcance de esta amenaza.

Diagrama que ilustra un bypass de control de acceso en endpoints de API, similar al fallo en payload-puck.
Diagrama que ilustra un bypass de control de acceso en endpoints de API, similar al fallo en payload-puck. — Foto: Zulfugar Karimov vía Unsplash

El vector CVSS (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L) nos indica precisamente eso: ataque desde red, baja complejidad, sin privilegios previos ni interacción del usuario, con impacto alto en confidencialidad e integridad, y bajo en disponibilidad.

Análisis técnico del bypass de control de acceso

PayloadCMS estructura su seguridad en torno a funciones access a nivel de colección y operación (create, read, update, delete). El plugin payload-puck genera automáticamente endpoints para gestionar el contenido visual. El error de implementación hizo que, internamente, cada petición a estos endpoints ejecutase una llamada a req.payload.API con la bandera overrideAccess activa, anulando así cualquier lógica personalizada de admin, user o public.

Según el commit de correción, el problema se solucionó eliminando el valor por defecto true y permitiendo que las reglas de acceso configuradas fluyan correctamente.

Sistemas y versiones afectadas por CVE-2026-39397

La vulnerabilidad es específica del ecosistema de PayloadCMS y su integración con el constructor visual Puck. La tabla siguiente detalla el alcance exacto.

Producto / Plugin Versiones vulnerables Versión parcheada
@delmaredigital/payload-puck Todas las versiones anteriores a 0.6.23 0.6.23 y superiores

Atención: Cualquier sitio web o aplicación construida con PayloadCMS que utilice una versión vulnerable del plugin es potencialmente explotable si los endpoints /api/puck/* están expuestos públicamente (lo habitual en despliegues estándar).

Pantalla de control de versiones de software mostrando una actualización crítica de seguridad.
Pantalla de control de versiones de software mostrando una actualización crítica de seguridad. — Foto: Liam Briese vía Unsplash

Cómo parchear CVE-2026-39397: guía paso a paso

La remediación es directa: actualizar el plugin a su versión corregida. A continuación, detallamos el proceso según el gestor de paquetes utilizado.

Paso 1: Verificar la versión actual instalada

En el directorio raíz de tu proyecto PayloadCMS, ejecuta:

Terminal de comandos ejecutando npm update para aplicar un parche de seguridad urgente.
Terminal de comandos ejecutando npm update para aplicar un parche de seguridad urgente. — Foto: Bernd 📷 Dittrich vía Unsplash
npm list @delmaredigital/payload-puck

O revisa directamente tu archivo package.json. Si la versión es menor a 0.6.23, estás vulnerable.

Paso 2: Actualizar a la versión parcheada

Para actualizar usando npm (asegúrate de tener permisos de escritura):

npm update @delmaredigital/payload-puck@0.6.23

Si usas yarn:

yarn upgrade @delmaredigital/payload-puck@0.6.23

Si la versión está fijada en package.json, modifícala manualmente a "@delmaredigital/payload-puck": "^0.6.23" y luego ejecuta npm install o yarn install.

Paso 3: Revisar cambios y reiniciar

Tras la actualización, es crucial reiniciar el servidor de PayloadCMS (o el proceso de despliegue) para que los cambios en el código del plugin se carguen. Recomendamos también ejecutar cualquier suite de pruebas existente para verificar que la integración de Puck sigue funcionando correctamente.

Medidas adicionales de mitigación para CVE-2026-39397

Si, por algún motivo, no puedes aplicar el parche de inmediato, considera estas medidas temporales para reducir la superficie de ataque. Estas no sustituyen a la actualización.

1. Restringir el acceso a los endpoints /api/puck/*

Puedes utilizar reglas de firewall a nivel de aplicación (middleware) o de red para bloquear el acceso externo a las rutas afectadas. Por ejemplo, en un middleware de Express (PayloadCMS se basa en Express):

Configuración de un cortafuegos de red para mitigar accesos no autorizados a endpoints sensibles.
Configuración de un cortafuegos de red para mitigar accesos no autorizados a endpoints sensibles. — Foto: Jakub Żerdzicki vía Unsplash
app.use('/api/puck', (req, res, next) => {
  // Permitir solo desde IPs internas o redes de administración
  const clientIp = req.ip;
  if (!clientIp.startsWith('10.0.') && !clientIp.startsWith('192.168.')) {
    return res.status(403).send('Acceso prohibido');
  }
  next();
});

2. Desactivar el plugin temporalmente

Si la funcionalidad de Puck no es crítica, puedes comentar su registro en la configuración de Payload (payload.config.ts o similar) hasta que puedas parchar. Esto eliminará por completo los endpoints vulnerables.

3. Implementar un Web Application Firewall (WAF)

Configurar reglas en tu WAF para monitorizar y bloquear peticiones inusuales a las rutas de API de Puck puede ayudar a detectar intentos de explotación. Reglas basadas en ratio de peticiones o patrones de inyección son útiles.

Consecuencias de no parchear la vulnerabilidad en payload-puck

Ignorar esta vulnerabilidad expone tu proyecto PayloadCMS a riesgos severos. Un atacante podría, sin ninguna credencial:

  • Robar todo el contenido gestionado por Puck: Artículos, páginas, bloques de texto, imágenes y metadatos.
  • Modificar o eliminar contenido a voluntad: Alterando la información pública del sitio, lo que conlleva daño reputacional y de confianza.
  • Inyectar código malicioso: Si Puck permite contenido HTML/JS, podría ser un vector para ataques de cross-site scripting (XSS) persistente contra los visitantes.
  • Comprometer la integridad de la base de datos: Dado que las operaciones CRUD son completas, el atacante tiene un control casi administrativo sobre las colecciones registradas.

En contextos de comercio electrónico, medios de comunicación o administración de contenidos corporativos, el impacto podría ser catastrófico.

✅ Lista de verificación post-parche:

  • Confirmar que la versión de @delmaredigital/payload-puck en package.json y package-lock.json es 0.6.23 o superior.
  • Realizar pruebas de funcionalidad en el constructor visual Puck para asegurar que el parche no ha roto funcionalidades clave.
  • Verificar que las reglas de acceso personalizadas en las colecciones de Puck ahora se aplican correctamente, intentando operaciones sin los permisos adecuados.
  • Consultar las referencias oficiales: GHSA-65w6-pf7x-5g85 y el commit de fix.

Referencias y recursos oficiales


¿Tu organización está preparada ante las ciberamenazas?

En Iberia Intelligence combinamos Ciberinteligencia y Automatización con IA para anticipar amenazas, proteger activos digitales y blindar la operativa de empresas e instituciones hispanohablantes.

→ Conoce nuestros servicios y da el primer paso

Deja un comentario