El CVE-2026-0894 Custom Post Widget es una vulnerabilidad de tipo Stored XSS descubierta en el plugin Content Blocks (Custom Post Widget) para WordPress, que afecta todas las versiones hasta la 3.3.9. Permite a atacantes con acceso de contributor o superior inyectar scripts maliciosos en páginas del sitio, que se ejecutan en el navegador de cualquier visitante.
En 30 segundos
- Plugin afectado: Content Blocks (Custom Post Widget), versiones hasta 3.3.9 inclusive.
- Tipo de ataque: Stored XSS vía el shortcode
[content_block], sin sanitización del input. - Nivel de acceso requerido: contributor o superior (no se puede explotar sin cuenta en el sitio).
- Impacto: inyección de scripts que se ejecutan en el navegador de cada visitante de la página afectada.
- Solución: actualizar a la versión 3.3.10 o superior desde el panel de WordPress.
Wordfence es un plugin de seguridad para WordPress desarrollado por Wordfence Inc. que proporciona firewall, escaneo de malware y protección contra ataques de fuerza bruta.
Qué es el CVE-2026-0894
El CVE-2026-0894 es el identificador oficial de una vulnerabilidad de Cross-Site Scripting almacenado (Stored XSS) en el plugin Content Blocks (Custom Post Widget) para WordPress. Según el reporte de Wordfence, el problema fue identificado en todas las versiones del plugin hasta la 3.3.9 inclusive, y recibió un puntaje CVSS v3.1 de entre 5.4 y 6.4 (severidad media-alta).
El vector es claro: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N. Acceso por red, baja complejidad, privilegios bajos requeridos, sin interacción de usuario, con alcance que cruza el límite del componente afectado. No es una vulnerabilidad trivial.
La raíz del problema es ausencia de sanitización del input y de escaping en el output sobre los valores que el plugin lee de los content blocks creados por el usuario.
Cómo funciona el ataque XSS en Custom Post Widget

Ponele que tenés un sitio con varios colaboradores que pueden crear contenido. Uno de ellos, con rol contributor, crea un content block (el tipo de post especial que maneja este plugin) e incluye en el cuerpo un payload JavaScript dentro del shortcode [content_block].
Lo que debería pasar: el plugin sanitiza el input, escapa el output, y el script nunca llega al navegador del visitante. Lo que pasa con las versiones vulnerables: el input viaja directo al HTML sin filtrar, el script se guarda en la base de datos junto con el contenido, y se ejecuta cada vez que alguien abre una página donde ese content block está embebido (spoiler: puede ser la home, una landing, un post cualquiera). Cubrimos ese tema en detalle en herramientas de protección WordPress.
Así es el Stored XSS: a diferencia del reflejado, no necesita que la víctima haga clic en un link especial. El script está ahí, esperando en el servidor, y se dispara solo cuando alguien visita la página. El fix está documentado en el changeset del repositorio oficial de WordPress.org.
Quién está afectado: niveles de acceso requeridos
Acá viene lo importante: el atacante necesita estar autenticado en el sitio con al menos rol de contributor. Eso baja bastante el riesgo en sitios de una sola persona o con equipo muy cerrado.
El tema es que muchos sitios WordPress, especialmente revistas, portales de noticias o comunidades, tienen decenas de contributors registrados. Cualquiera de esos usuarios puede ser el vector, ya sea por malas intenciones directas o porque su cuenta fue comprometida previamente.
La jerarquía de roles en WordPress, de menor a mayor privilegio: Subscriber, Contributor, Author, Editor, Administrator. El CVE-2026-0894 es explotable desde Contributor en adelante. ¿Cuántos contributors tiene tu sitio? Si no lo sabés de memoria, ya tenés una tarea pendiente.
Impacto real en tu sitio WordPress
Un Stored XSS bien ejecutado tiene más consecuencias de las que parece en un primer momento. El script inyectado puede hacer básicamente todo lo que puede hacer JavaScript en el contexto del navegador del visitante:
- Robo de sesiones: si el visitante es un admin logueado, el script puede copiar sus cookies y mandárselas a un servidor externo del atacante.
- Redirecciones ocultas: el usuario termina en una página de phishing sin que WP muestre nada raro.
- Inyección de malware o miners: el script puede cargar código externo adicional (cryptominer, keylogger, etc.).
- Defacement: modificación visual del sitio para usuarios específicos o todos los visitantes.
- Impacto SEO: Google detecta el contenido malicioso, marca el sitio como peligroso, y el tráfico se desploma.
¿Y si el visitante afectado resulta ser otro admin? Exacto: el atacante escala de contributor a control total del sitio sin tocar ninguna función de administración. Tema relacionado: mantener tus sistemas actualizados.
Cómo parchear: actualizar Custom Post Widget
La solución es directa. Según el reporte de Patchstack, el problema afecta hasta la versión 3.3.9. Cualquier versión a partir de 3.3.10 tiene el fix aplicado.
Pasos para actualizar:
- Hacé un backup del sitio antes de cualquier actualización (WPVivid, UpdraftPlus, lo que uses).
- Ingresá al panel de WordPress → Plugins → Plugins instalados.
- Buscá «Content Blocks» o «Custom Post Widget» en la lista.
- Hacé clic en «Actualizar ahora» si aparece la notificación, o verificá manualmente la versión instalada.
- Confirmá que la versión activa sea 3.3.10 o posterior.
Si tu instancia de WordPress tiene actualizaciones automáticas de plugins activadas (y con gestión de seguridad sería lo recomendable), puede que ya esté parcheado. Verificalo igual.
Auditar tu sitio después del parcheo
Actualizar el plugin cierra la puerta, pero no limpia lo que ya pudo haberse inyectado antes. Si el plugin estuvo instalado sin actualizar durante un tiempo, vale hacer una revisión.
Lo primero: revisar el historial de revisiones de los posts y content blocks creados por contributors. WordPress guarda revisiones automáticas (siempre que no estén desactivadas), y podés comparar versiones para detectar contenido sospechoso agregado recientemente.
Lo segundo: si tenés Wordfence instalado, corré un escaneo completo desde Wordfence → Scan → Start New Scan. Va a revisar archivos y base de datos buscando patrones conocidos de malware y código inyectado. Sucuri tiene un scanner online gratuito que complementa bien.
Lo tercero, y que se olvida seguido: revisá los logs de acceso del servidor buscando requests a endpoints externos no reconocidos, sobre todo desde el período de exposición. Si usás hosting compartido (o un VPS en donweb.com), el panel de control suele dar acceso a los access logs de Apache/Nginx.
Qué está confirmado / Qué no
- Confirmado: La vulnerabilidad existe en todas las versiones hasta 3.3.9, según el advisory oficial de Wordfence e INCIBE-CERT.
- Confirmado: El CVSS score es entre 5.4 y 6.4 (rango medio-alto).
- Confirmado: El fix está disponible en la versión 3.3.10, con el changeset publicado en el repositorio de WordPress.org.
- No confirmado: No hay reportes públicos de explotación activa masiva a la fecha de publicación de este artículo (20/04/2026).
- No confirmado: La cantidad exacta de sitios afectados activamente todavía no fue divulgada por Wordfence ni Patchstack.
Cómo prevenir: mejores prácticas de seguridad
El CVE-2026-0894 es un caso de libro sobre por qué el principio de mínimo privilegio importa. Algunos puntos concretos: Ya lo cubrimos antes en defensa en profundidad de red.
- Revisá quién tiene rol de contributor o superior: ¿realmente todos necesitan ese nivel? Un subscriber no puede crear content blocks; si alguien solo lee o comenta, bajale el rol.
- Usá Wordfence o Sucuri con firewall activo: muchos ataques XSS tienen patrones conocidos que los WAF bloquean antes de que lleguen a la base de datos.
- Activá 2FA para todos los usuarios con rol editor o superior: si una cuenta de contributor se compromete porque la contraseña era débil, el 2FA no la salva, pero sí reduce el vector de compromiso masivo.
- Monitoreo de cambios de contenido: plugins como WP Activity Log registran qué usuario modificó qué post y cuándo. Eso permite detectar inyecciones antes de que hagan daño visible.
- Actualizaciones automáticas para plugins de seguridad: al menos para Wordfence, Sucuri y los plugins con historial de CVEs, configurá auto-update. El tiempo entre publicación del CVE y la explotación se redujo a horas en muchos casos.
Errores comunes al manejar este tipo de vulnerabilidad
Error 1: Actualizar el plugin y asumir que ya está. Actualizar cierra la vulnerabilidad nueva, pero no revierte lo que un atacante ya inyectó antes del parche. Siempre hay que auditar el contenido existente después de una XSS almacenada.
Error 2: Pensar que «como requiere contributor, no aplica a mi sitio». Muchos sitios tienen usuarios registrados de los que ya ni se acuerdan: colaboradores viejos, autores invitados de hace dos años, cuentas de prueba. Revisá la lista de usuarios completa. Lo complementamos en otras alertas de seguridad crítica.
Error 3: Confundir XSS reflejado con almacenado. El reflejado necesita que la víctima haga clic en un link malicioso, el almacenado no. Eso cambia el nivel de riesgo. Medidas pensadas para el primero (como filtros del lado del navegador) no son suficientes para el segundo.
Preguntas Frecuentes
¿Qué es el CVE-2026-0894 y cómo me afecta?
Es una vulnerabilidad de Cross-Site Scripting almacenado en el plugin Content Blocks (Custom Post Widget) para WordPress, que afecta versiones hasta la 3.3.9. Te afecta si tenés ese plugin instalado y usuarios con rol contributor o superior en tu sitio, ya que un atacante con esas credenciales puede inyectar scripts maliciosos que se ejecutan en el navegador de tus visitantes.
¿Mi sitio está vulnerable si tengo Custom Post Widget instalado?
Depende de la versión. Si tenés instalada la 3.3.9 o cualquier versión anterior, sí, el sitio es vulnerable. Si ya actualizaste a 3.3.10 o superior, el problema está cerrado. Podés verificar la versión activa en WordPress → Plugins → «Content Blocks (Custom Post Widget)». Complementá con otras vulnerabilidades XSS similares.
¿Cómo actualizo Custom Post Widget a una versión segura?
Desde el panel de WordPress, andá a Plugins → Plugins instalados, buscá el plugin y hacé clic en «Actualizar ahora» si aparece la notificación. Antes de actualizar, hacé un backup completo del sitio. La versión 3.3.10 o superior ya tiene el fix de sanitización aplicado.
¿Cuáles son los signos de explotación de esta XSS?
Comportamiento inusual en páginas que usan el shortcode [content_block]: redirecciones inesperadas, popups, o scripts externos cargándose en el código fuente de la página. También podés ver en los logs de Wordfence requests a dominios externos no reconocidos originados desde tu sitio. Un escaneo completo de Wordfence o Sucuri puede detectar el payload en la base de datos.
¿Qué riesgos tiene el Stored XSS en plugins WordPress?
Un Stored XSS permite robo de sesiones (incluyendo sesiones de admin), inyección de malware, redirecciones a sitios de phishing, y degradación SEO si Google detecta el contenido malicioso. A diferencia del XSS reflejado, el payload ya está guardado en el servidor y se dispara automáticamente para cada visitante de la página afectada, sin necesidad de ninguna acción adicional del atacante.
Conclusión
El CVE-2026-0894 Custom Post Widget no es una vulnerabilidad crítica en el sentido de «cualquiera te puede hackear el sitio desde afuera», pero tampoco es para ignorar. Requiere un atacante con acceso al sitio, sí. El punto es que muchos sitios WordPress tienen ese acceso distribuido entre varios usuarios, algunos de los cuales llevan meses sin actividad o con contraseñas que no cumplen ningún criterio de seguridad.
La acción inmediata es simple: actualizar a 3.3.10, auditar content blocks existentes, revisar la lista de contributors. Si tu sitio no usa este plugin, todo bien. Si lo usás, el parche ya está disponible y no hay razón para demorarlo.