El 9 de junio de 2026, INCIBE-CERT registró la CVE-2026-8977 WordPress: un Stored XSS en el plugin WP GDPR Cookie Consent que afecta versiones hasta 1.0.0 incluida. Con acceso de subscriber alcanza para inyectar scripts maliciosos que se ejecutan automáticamente en todas las páginas del sitio. No se necesita ser administrador.
CVE-2026-8977 es una vulnerabilidad Stored Cross-Site Scripting (XSS) en el plugin WP GDPR Cookie Consent para WordPress. La falla combina tres problemas en cadena: la acción AJAX ninja_gdpr_ajax_actions no verifica nonces ni capacidades en la función handleAjaxCalls(), los valores gdprConfig se guardan en la base de datos sin ningún proceso de sanitización, y la función generateCSS() los inyecta sin escapar dentro de un bloque <style> del wp_head que se renderiza en cada página. CVSS 3.1: 6.4 Medium (vector AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N), según el boletín oficial.
En 30 segundos
- Plugin afectado: WP GDPR Cookie Consent, versiones hasta 1.0.0 incluida
- Tipo de falla: Stored XSS vía AJAX sin verificación de nonce ni sanitización de entrada
- Quién puede atacar: cualquier usuario autenticado con rol subscriber o superior
- Severidad: CVSS 3.1 = 6.4 Medium; Scope Changed (el impacto cruza al navegador del visitante)
- Solución: actualizar el plugin a la versión superior a 1.0.0 de inmediato
¿Qué plugin y versiones son vulnerables?
El plugin en cuestión se llama WP GDPR Cookie Consent y está disponible en el repositorio oficial de WordPress.org. Todas las versiones hasta la 1.0.0 incluida están afectadas. Para verificar qué versión tenés instalada: andá a Plugins → Plugins instalados en el panel de WordPress y buscá ese plugin. Si el número de versión es 1.0.0 o menor, el sitio está expuesto ahora mismo.
Acá vale una aclaración que parece obvia pero no lo es: WP GDPR Cookie Consent no es lo mismo que Complianz, CookieYes ni Cookie Notice. Hay varios plugins de consentimiento GDPR en WordPress.org con nombres parecidos, y es fácil revisarlos por arriba y concluir que «el de cookies» está bien. Revisá el nombre exacto del plugin que tenés instalado antes de dar el tema por cerrado.
| Plugin GDPR para WordPress | ¿Vulnerable a CVE-2026-8977? | Notas |
|---|---|---|
| WP GDPR Cookie Consent ≤ 1.0.0 | Sí | Actualizar a versión corregida de inmediato |
| Complianz GDPR/CCPA | No afectado | Una de las alternativas más usadas del repositorio |
| CookieYes (Cookie Law Info) | No afectado | Amplia base de usuarios activos |
| Cookie Notice & Compliance | No afectado | Opción liviana y popular |

¿Cómo funciona el ataque y quién puede explotarlo?
Ponele que alguien se registra en tu sitio como suscriptor para bajar un recurso gratuito o acceder a contenido protegido. Con eso alcanza para explotar esta vulnerabilidad (sí, en serio). El flujo técnico es el siguiente:
- Paso 1 – Inyección inicial: el atacante manda una petición POST autenticada a
admin-ajax.phpconaction=ninja_gdpr_ajax_actions. La funciónhandleAjaxCalls()no verifica quién hace el request ni si tiene un nonce válido. - Paso 2 – Persistencia en base de datos: el payload JavaScript queda guardado en
gdprConfigdentro dewp_options, sin ningún proceso de sanitización que lo filtre. - Paso 3 – Ejecución automática: cuando cualquier página del sitio se carga,
generateCSS()toma ese valor almacenado y lo inyecta sin escapar dentro de un bloque<style>en el<head>. El script del atacante corre en el navegador de cada visitante.
¿Y qué puede hacer el atacante desde ahí? Redirigir visitantes a sitios de phishing, robar cookies de sesión del administrador si este abre el panel mientras el payload está activo, inyectar publicidad propia reemplazando los ads legítimos, o descargar malware. El score S:C (Scope Changed) en el vector CVSS refleja exactamente eso: el ataque parte del servidor, pero el impacto real ocurre en el navegador del visitante, fuera del alcance original del plugin. Más contexto en soluciones WAF contra esta vulnerabilidad.
¿Cuál es el impacto en mi sitio WordPress?
El nivel de riesgo varía según el tipo de sitio. Estos escenarios son los más críticos:
- Sitio con registros abiertos: cualquier persona crea una cuenta subscriber y lanza el ataque sin fricción
- Tienda WooCommerce: los clientes tienen cuentas de usuario por defecto; el script puede interceptar datos de checkout o redirigir a pasarelas falsas
- Formularios con datos sensibles: riesgo de exfiltración de información de visitantes directamente desde el navegador
- Sitio monetizado con publicidad: el atacante puede reemplazar tus anuncios con los suyos, robando ingresos
Hay un costo adicional que se subestima seguido: si Google detecta código malicioso en las páginas del sitio, puede marcarlo como peligroso en los resultados de búsqueda. Eso no se revierte de un día para el otro (y el daño al tráfico orgánico puede durar semanas, por si hacía falta otro argumento para actualizar hoy).
¿Cómo actualizar el plugin y eliminar la vulnerabilidad?
Antes de tocar nada, hacé un backup completo del sitio, base de datos incluida. Después el proceso es directo:
- 1. Plugins → Plugins instalados en el panel de WordPress
- 2. Buscá WP GDPR Cookie Consent y hacé clic en «Actualizar»
- 3. Verificá que la versión instalada sea superior a 1.0.0
- 4. Limpiá la caché del sitio (LiteSpeed, W3 Total Cache, o la que uses) para que las páginas se regeneren sin el CSS contaminado
Hacés el backup, actualizás el plugin, confirmás que la versión nueva figura en el listado, limpiás la caché, revisás gdprConfig en la base de datos, verificás que no haya scripts almacenados, y recién entonces podés considerar que el incidente está cerrado. Sin ese último paso estás sellando la puerta con el intruso adentro. Relacionado: nuestro análisis completo de CVEs.
El parche, visible en el repositorio oficial del plugin, corrige los tres eslabones de la cadena: agrega verificación de nonce y capacidades en handleAjaxCalls(), sanitiza los valores entrantes, y escapa la salida en generateCSS(). Sin los tres cambios juntos, cualquiera de las piezas sola no alcanzaba para cerrar el vector.
¿Cómo saber si mi sitio fue atacado?
Actualizar corta el acceso futuro, pero no limpia lo que ya puede estar guardado en la base de datos. Antes de declarar el sitio sano, revisá lo siguiente:
- Auditar gdprConfig en wp_options: ejecutá
wp option get gdprConfigcon WP-CLI, o la querySELECT option_value FROM wp_options WHERE option_name = 'gdprConfig';en phpMyAdmin. Si el valor contiene<script>,javascript:o cualquier cosa que no sea CSS de configuración del banner, hay una inyección activa. - Revisar logs del servidor: buscá peticiones POST a
admin-ajax.phpcon el parámetroaction=ninja_gdpr_ajax_actionsanteriores a la fecha del update. En Apache:grep "ninja_gdpr_ajax_actions" /var/log/apache2/access.log - Inspeccionar el código fuente público: abrí el código fuente de cualquier página del sitio y buscá el bloque
<style>generado por el plugin en el<head>. Cualquier cosa que no sea CSS puro es señal de compromiso. - Ejecutar un escaneo con Wordfence: su scanner detecta archivos modificados y código malicioso almacenado en opciones de la base de datos.
Si tenés WP_DEBUG activado en wp-config.php, revisá también /wp-content/debug.log. Errores inusuales del plugin durante el período de exposición pueden aparecer ahí.
¿Qué medidas de defensa adicionales se recomiendan?
El parche resuelve este problema específico. Pero hay capas adicionales que reducen el impacto de CVEs similares en el futuro:
- Content Security Policy (CSP): un header CSP configurado para bloquear scripts inline minimiza el daño de cualquier XSS almacenado. Ejemplo básico para .htaccess:
Header set Content-Security-Policy "script-src 'self'". Probalo primero en staging porque puede romper scripts legítimos del sitio. - Deshabilitar registros de usuarios si no son necesarios: Configuración → General → desactivar «Cualquiera puede registrarse». Sin subscribers externos, este vector desaparece.
- Monitoreo de wp_options: Wordfence puede alertar cuando opciones críticas de la base de datos cambian de forma inesperada, sin que vos lo hayas iniciado.
- WAF con regla para ninja_gdpr: un firewall de aplicaciones web puede bloquear peticiones a esa acción AJAX como medida transitoria (que quede claro: es un mitigador mientras se actualiza, no un reemplazo del parche).
- 2FA para administradores: si el atacante logró robar una cookie de sesión del admin vía XSS, el segundo factor bloquearía el acceso al panel aunque tenga las credenciales.
Errores comunes al manejar esta vulnerabilidad
Confundir WP GDPR Cookie Consent con otros plugins de cookies. Hay varios plugins de consentimiento GDPR en WordPress.org con nombres que se parecen bastante. Revisá el nombre exacto del plugin que tenés instalado. «WP GDPR Cookie Consent» es específicamente el afectado; Complianz, CookieYes y Cookie Notice no están afectados por esta CVE. Ya lo cubrimos antes en herramientas de detección de malware.
Actualizar sin auditar el contenido almacenado. Instalar el parche y dar el tema por cerrado es el error más frecuente. Si el atacante ya ejecutó el payload antes del update, gdprConfig puede seguir teniendo código malicioso en la base de datos. La actualización cierra el vector de inyección, pero no limpia lo que ya entró.
Asumir que el sitio no tiene suscriptores. Incluso sitios aparentemente «sin registro de usuarios» pueden tener cuentas activas de formularios anteriores, integraciones de WooCommerce, o colaboradores con rol subscriber. Revisá Usuarios → Todos los usuarios y auditá los roles antes de concluir que no hay riesgo.
Preguntas Frecuentes
¿Qué es CVE-2026-8977?
CVE-2026-8977 es una vulnerabilidad Stored XSS en el plugin WP GDPR Cookie Consent para WordPress, publicada en junio de 2026. Afecta todas las versiones hasta 1.0.0 incluida. Permite a cualquier usuario autenticado con rol subscriber inyectar scripts maliciosos que se ejecutan en las páginas del sitio cada vez que un visitante las carga. Lo complementamos en usando nuestros scripts de reproducción.
¿Cómo afecta CVE-2026-8977 a mi sitio WordPress?
El script inyectado corre en el navegador de cada visitante. Los efectos van desde redirecciones a sitios de phishing y robo de cookies de sesión del administrador, hasta inyección de publicidad no autorizada e interceptación de datos en formularios. Los sitios con WooCommerce o con monetización tienen mayor exposición al impacto económico directo. Cubrimos ese tema en detalle en entre las vulnerabilidades críticas reportadas.
¿Cuál es la versión vulnerable del plugin WP GDPR Cookie Consent?
Todas las versiones hasta 1.0.0 incluida están afectadas. Para verificar: Panel de WordPress → Plugins → Plugins instalados → buscá «WP GDPR Cookie Consent» y revisá el número de versión. Cualquier instalación en 1.0.0 o inferior requiere actualización inmediata a la versión parcheada.
¿Cómo me protejo de la vulnerabilidad XSS en WP GDPR Cookie Consent?
La solución definitiva es actualizar el plugin a la versión corregida (superior a 1.0.0). Antes del update, hacé backup. Después, auditá el valor de gdprConfig en wp_options con WP-CLI o phpMyAdmin para verificar que no haya código malicioso almacenado de antes del parche. Como defensa adicional, configurá Wordfence para monitorear cambios inesperados en wp_options.
¿Qué usuarios pueden explotar CVE-2026-8977?
Cualquier usuario autenticado con rol subscriber o superior puede explotar la vulnerabilidad. No se necesita acceso de editor ni de administrador. Esto la hace especialmente crítica en sitios con registros abiertos, tiendas WooCommerce (donde los clientes tienen cuentas propias), o cualquier sitio que permita membresías o acceso a contenido protegido.
Conclusión
CVE-2026-8977 ilustra un patrón que se repite en el ecosistema WordPress: el código que gestiona configuraciones de interfaz (banners, widgets, opciones de diseño) no siempre recibe el mismo escrutinio de seguridad que el código de autenticación o de procesamiento de pagos. Un banner de cookies parece inofensivo. Pero si el handler que lo gestiona no valida quién hace los pedidos, no sanitiza lo que recibe y no escapa lo que imprime, se convierte en un vector accesible para cualquier usuario registrado.
La acción concreta es clara: si tenés WP GDPR Cookie Consent instalado en versiones hasta 1.0.0, actualizá ahora mismo. Hacé el backup primero, luego el update, y después auditá gdprConfig en la base de datos para confirmar que no hay payload almacenado de antes del parche. No des el tema por cerrado solo por haber actualizado el plugin.
Fuentes
- INCIBE-CERT — Boletín oficial CVE-2026-8977
- Managed-WP — Critical XSS in GDPR Cookie Consent Plugin (CVE-2026-8977)
- Trend Micro — WordPress GDPR Plugin Vulnerable to Cross-Site Scripting Attack
- NinTechNet — WordPress GDPR Cookie Consent Plugin: Fixed Vulnerability
- WordPress.org — GdprHandler.php (código fuente del parche)