| Nombre del plugin | Permitir HTML en las descripciones de categorías |
|---|---|
| Tipo de vulnerabilidad | Scripting entre sitios (XSS) |
| Número CVE | CVE-2026-0693 |
| Urgencia | Baja |
| Fecha de publicación de CVE | 2026-02-13 |
| URL de origen | CVE-2026-0693 |
Urgent: Stored XSS in “Allow HTML in Category Descriptions” (<= 1.2.4) — Lo que los propietarios de sitios de WordPress deben hacer ahora
Resumen: A stored Cross-Site Scripting (XSS) vulnerability (CVE-2026-0693) has been disclosed in the WordPress plugin “Allow HTML in Category Descriptions” (versions ≤ 1.2.4). An authenticated user with Administrator-level privileges can inject malicious HTML/JavaScript into category descriptions that can later execute in visitors’ or other administrators’ browsers. There is currently no official patch for the vulnerable versions. This advisory explains technical details, threat scenarios, immediate mitigations, detection and clean-up steps, and longer-term hardening from the perspective of a Hong Kong security expert.
Nota: Si ejecutas este plugin y tienes una versión afectada instalada, trata esto como una tarea de seguridad del sitio de alta prioridad — aunque la vulnerabilidad requiere privilegios de administrador, el impacto puede ser significativo en la práctica.
¿Cuál es la vulnerabilidad?
- Tipo: Scripting entre sitios almacenado (XSS).
- Affected component: WordPress plugin “Allow HTML in Category Descriptions” — versions ≤ 1.2.4.
- CVE: CVE-2026-0693.
- CVSS: 5.9 (medio), Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:L.
- Root cause: The plugin allows administrators to save unfiltered HTML in taxonomy descriptions without proper sanitization or output encoding. Malicious JavaScript stored in a category description can be executed in the context of a page that renders that description (front-end or certain admin views), enabling cookie theft, privilege abuse, or actions performed with the victim’s browser session.
Por qué esto es importante: Los administradores son cuentas de confianza. Un atacante que compromete una cuenta de administrador (o engaña a un administrador para que guarde una descripción manipulada) puede persistir scripts que victimicen a otros usuarios administradores o visitantes del sitio. Las consecuencias incluyen desfiguración del sitio, recolección de credenciales, redirecciones maliciosas o toma de control total del sitio a través de ataques encadenados.
Cómo un atacante puede explotar esto
- El atacante obtiene o compromete una cuenta de Administrador (phishing, reutilización de contraseñas, insider), o engaña a un administrador para que guarde una carga útil.
- Through the plugin interface (category edit screen) or another entry point that updates taxonomy descriptions, the attacker injects a payload into the category description field — e.g., , an SVG with an onload/onerror handler, or attribute-based payloads such as onmouseover, srcset, or javascript: URIs.
- La carga útil se almacena en la base de datos (term_taxonomy.description).
- When an admin or visitor views the category page (or any admin page rendering that description), the script runs in their browser within the site’s origin.
- Las posibles acciones del atacante incluyen:
- Recoger cookies/localStorage y enviarlas a un servidor remoto.
- Usar la sesión de navegador autenticada de la víctima para llamar a los puntos finales de WordPress REST/AJAX (potencialmente creando usuarios, instalando plugins, modificando opciones) si las verificaciones de nonce o capacidad son débiles.
- Inyectar contenido malicioso adicional (anuncios, redirecciones, formularios de recolección de credenciales) o modificar páginas de administrador.
Matiz importante: Muchas instalaciones de WordPress configuran las cookies de autenticación como HttpOnly, lo que impide el acceso directo a las cookies por parte de JS. Sin embargo, JavaScript aún puede realizar solicitudes XHR/fetch autenticadas si las protecciones de mismo origen y nonce están ausentes o si se roban nonces. Los atacantes pueden encadenar XSS con otras debilidades para escalar el impacto.
Interacción del usuario: Aunque algunos informes clasifican esto como que requiere interacción del usuario (por ejemplo, un administrador visitando una página manipulada), el XSS almacenado es persistente y puede ejecutarse automáticamente cuando se cargan las páginas.
Acciones inmediatas y priorizadas (dentro de la próxima hora)
- Desactiva el plugin ahora
Go to wp-admin → Plugins and deactivate “Allow HTML in Category Descriptions” immediately. If you cannot access the admin panel, disable via FTP or hosting file manager by renaming the plugin folder:
wp-content/plugins/allow-html-in-category-descriptions→ añadir-desactivado. - Pon el sitio en modo de mantenimiento (si es apropiado)
Si sospechas de explotación activa (redirecciones visibles, desfiguración, spam), bloquea temporalmente el acceso público mientras investigas.
- Audita y rota las credenciales administrativas
Fuerza restablecimientos de contraseña para todas las cuentas de Administrador. Revoca sesiones y tokens (Usuarios → Todos los Usuarios → para cada administrador, “Cerrar sesión en todas partes” o usa herramientas de expiración de sesión). Aplica contraseñas fuertes y habilita la Autenticación de Dos Factores (2FA) para cuentas de administrador.
- Bloquea nuevas solicitudes que intenten guardar cargas útiles de XSS
Si puedes implementar filtrado de solicitudes en el host, CDN, o a través de un Firewall de Aplicaciones Web (WAF), bloquea las solicitudes POST que intenten guardar descripciones de categoría que contengan patrones similares a scripts. Consulta las reglas de WAF sugeridas más adelante en este artículo.
- Haz una copia de seguridad de tu sitio (archivos + DB)
Crea una copia de seguridad completa antes de modificar o limpiar el sitio. Exporta la base de datos y descarga wp-content y uploads para copias forenses.
- Escanea inmediatamente en busca de indicadores de compromiso
Busca usuarios inesperados, archivos desconocidos, tareas programadas (trabajos wp_cron), valores de opción cambiados y contenido inyectado en publicaciones, páginas y descripciones de taxonomía.
Investigación: encuentra descripciones de categoría maliciosas y evalúa el daño
Las descripciones de categoría se almacenan en la base de datos; busca contenido similar a scripts rápidamente.
Usando WP-CLI (recomendado si tienes acceso a la terminal):
wp db query "SELECT term_taxonomy_id, term_id, description FROM wp_term_taxonomy WHERE description LIKE '%
wp db query "SELECT term_taxonomy_id, term_id, description FROM wp_term_taxonomy WHERE description REGEXP '(script|onerror|onload|javascript:|data:|iframe|svg|img)';"
If you don’t have WP-CLI, run equivalent SQL in phpMyAdmin or your hosting database tool.
Also check:
- Posts and pages: search
post_contentfor similar patterns:SELECT ID, post_title FROM wp_posts WHERE post_content REGEXP '( - Widgets and theme options: check
wp_optionsfor injected HTML. - Plugin/theme files for unfamiliar or obfuscated code.
If you find suspicious descriptions, export them for forensics before making mass modifications.
Cleaning infected descriptions safely
Option A — Manual removal (small number of entries)
Use wp-admin → Posts/Terms editor and manually edit descriptions to remove payloads: Posts → Categories → edit each suspect category description.
Option B — Database cleanup (large or automated cleanup)
Test on a backup first. Example SQL to remove blocks from term descriptions UPDATE wp_term_taxonomy SET description = REGEXP_REPLACE(description, '', '', 'si') WHERE description REGEXP '