Click2Shell: actualizá WordPress 7.1.1 ya
Investigadores de pwn.ai demostraron una cadena crítica en WordPress Core, bautizada Click2Shell, que convierte un link manipulado + un click de un usuario con sesión iniciada en ejecución de código en el servidor. El parche llegó el 17/09/2026 en WordPress 7.1.1, un release de mantenimiento y seguridad con 11 security fixes que además se backporteó a las ramas soportadas hasta 4.7. Si tu sitio todavía corre una versión anterior — sin importar cuál —, estás expuesto.
La buena noticia: no se observó explotación activa al momento de escribir este post. La mala: el PoC completo es público desde el 18/09, ya circulan PoCs independientes de la cadena, el vector no deja rastro visible (el tema se instala pero queda inactivo, la apariencia del sitio no cambia) y es la tercera cadena crítica en Core en 2026, después de wp2shell (julio, explotado en la naturaleza y catalogado por CISA) y XSS2Shell (agosto). Este post te dice qué pasó, cómo verificarlo en tu sitio y qué hacer hoy.
Qué pasó
El 17 de septiembre de 2026, WordPress publicó 7.1.1, un release de mantenimiento y seguridad que corrige 11 fallas de seguridad (además de 17 bugs de Core y 19 del Block Editor). Entre ellas, una entrada que pasó desapercibida: “Specially crafted URLs can automatically install and preview an inactive theme from WordPress.org” (URLs especialmente diseñadas pueden instalar y previsualizar automáticamente un tema inactivo desde WordPress.org).
Detrás de ese bullet está Click2Shell, reportado por el equipo de investigación pwn.ai (los mismos de XSS2Shell en agosto). WordPress reprodujo el fallo el 22/08, pagó el máximo de su programa de bug bounty y lo parcheó en el release del 17/09. La divulgación técnica completa se publicó el 18/09/2026 con el detalle de la cadena completa hacia ejecución de código. Al momento de escribir este post, el CVE oficial todavía no fue asignado — WordPress confirmó que lo está tramitando.
Cómo funciona el ataque
Click2Shell explota un desacuerdo entre dos interpretadores sobre el mismo valor (parser differential, en jerga): el link manipulado apunta a la pantalla oficial de instalación de temas:
/wp-admin/theme-install.php?theme=twentytwenty"]>*>*>*/*
- El servidor lo entiende bien: la API de temas de WordPress.org canonicaliza el valor y lo reduce al slug legítimo
twentytwenty. Devuelve un tema real del catálogo oficial. - El navegador del admin lo entiende mal: el JavaScript de WordPress (
wp-admin/js/theme.js) reusa el valor original — con su puntuación intacta — dentro de un selector jQuery:
$( 'div[data-slug="' + slug + '"]' ).trigger( 'click' );
La comilla inyectada cierra el atributo, los >*> caminan por el árbol del DOM hasta los controles de la tarjeta del tema, y el /* neutraliza el fragmento restante. El resultado: el propio JavaScript de WordPress clickea el botón Install real, gastando el nonce de instalación y la capability install_themes del admin que está mirando la página. El atacante no necesita cuenta de WordPress ni esos privilegios: los toma prestados.
- El tema queda instalado pero inactivo — la apariencia del sitio no cambia, no se ve nada raro. Ahí aparece el segundo eslabón: un tema inactivo no es un tema dormido. WordPress carga su PHP durante una previsualización del Customizer:
/wp-admin/admin-ajax.php?wp_customize=on&customize_theme=mobile-repair-zone
- pwn.ai encontró que el tema del catálogo Mobile Repair Zone 2.5.4 (y más de 40 temas más) registraba un handler AJAX de instalación de plugins sin verificar nonce ni capability (
mobile_repair_zone_install_and_activate_plugin). Ese handler descarga un ZIP de plugin desde una URL que el atacante controla, lo descomprime enwp-content/plugins/y ejecuta su PHP. Código propio del atacante corriendo bajo la cuenta del servidor web.
La cadena completa, en un resumen: link manipulado → instalación automática de un tema oficial pero vulnerable → el Customizer carga su PHP → handler AJAX sin protección → ejecución de código. Con un solo click de un usuario logueado. El core solo no instala un ZIP arbitrario: instala un tema real del catálogo oficial elegido por el atacante, y de ahí necesita la falla del propio tema para llegar a PHP.
Indicadores de compromiso (IoCs)
Como no se reportó explotación activa, estos indicadores sirven para detectar intentos y, si aparecen, una posible víctima:
| # | Indicador | Dónde mirarlo |
|---|---|---|
| 1 | Temas instalados que no instalaste vos (p. ej. mobile-repair-zone o cualquier slug desconocido) | /wp-content/themes/ |
| 2 | Requests con theme-install.php?theme= conteniendo caracteres raros URL-encoded (%22%5D%3E%2A%3E...) | Logs del servidor / WAF |
| 3 | Activity de Customizer sobre un tema que no está activo: admin-ajax.php?wp_customize=on&customize_theme=<tema-no-activo> | Logs del servidor / WAF |
| 4 | Un tema inactivo no debería generar actividad: revisá si functions.php de algún tema instalado registra handlers wp_ajax_* para instalar plugins | Auditoría del tema |
El punto 2 es la firma del intento; los puntos 1 y 3 son las huellas de un intento exitoso.
Tabla de detalle técnico
| Campo | Dato |
|---|---|
| CVE | Pendiente de asignación al momento de publicación (WordPress lo está tramitando) |
| Producto | WordPress Core — todas las versiones anteriores a 7.1.1 |
| Tipo | Inyección en selector jQuery vía theme preview (parser differential) + cadena a RCE |
| Severidad | Standalone: 7.1 High; cadena completa: 9.3 Critical (auto-evaluación pwn.ai, con UI:R). Terceros citan hasta 9.6; el CVSS oficial de WordPress está pendiente |
| Versión corregida | 7.1.1 (17/09/2026, cambioset 63664: $.escapeSelector() + restricción a div.theme). El fix se backporteó a las ramas soportadas hasta 4.7 (LavX/Threadlinqs) |
| Requisito | Un click de cualquier usuario logueado en un link manipulado (un admin provee la capability de instalar temas) |
| Explotación activa | No observada al momento de publicación (THN, 18/09/2026) |
| Divulgación | Reportado 22/08 → parche 17/09 → PoC público completo 18/09/2026 |
| Contexto 2026 | Tercera cadena crítica en Core: wp2shell (julio, explotada, KEV de CISA), XSS2Shell (agosto, CVE-2026-64638 CVSS 8.9, fix 7.0.3), Click2Shell (septiembre, CVE pendiente) |
Nota sobre el score: el 9.6 que circula en varios medios proviene de re-análisis de terceros; la evaluación oficial de pwn.ai para la cadena es 9.3 con interacción de usuario (UI:R). Para tu decisión no cambia nada: es una cadena a ejecución de código en Core, con PoC público.
Por qué te puede tocar
- Es WordPress Core, no un plugin: el viejo consejo “mantené actualizados solo los plugins” no aplica. Cualquier versión anterior a 7.1.1 está afectada, incluso un WordPress pelado sin plugins. Si tu hosting no aplicó la actualización automática (redes de agencia, sitios con auto-updates desactivadas, instalaciones custom), seguís vulnerable.
- No deja rastro visible: el tema se instala inactivo, el sitio se ve igual, no aparece ningún aviso. El admin que clickeó el link no nota absolutamente nada.
- El PoC es público: el patrón de los últimos meses muestra que los exploits aparecen dentro de las 24-72 horas de la divulgación técnica (wp2shell tuvo PoCs públicos “within hours”). El timing importa.
- Regla de perfil: si manejás sitios de clientes y tu equipo clickea links externos desde sesiones admin (soporte, editores, devs), sos exactamente el target de este ataque.
Qué hacer ahora
- Actualizá a 7.1.1 (o la versión parcheada de tu rama) hoy: Escritorio → Actualizaciones → “Actualizar ahora”. Si tu rama no es la 7.x, el fix se backporteó a las ramas soportadas hasta 4.7 — aplicá el release de seguridad que corresponda a tu versión. Verificá la versión instalada en Escritorio → Ajustes → Acerca de WordPress (o
wp core versionpor WP-CLI si tenés acceso SSH). No asumas que el auto-update ya lo hizo: revisá cada sitio, incluidos staging y sitios viejos olvidados. - Si no podés actualizar ya (sitio custom, freeze de lanzamiento, dependencia rota): mientras tanto, agregá en
wp-config.phpla constantedefine( 'DISALLOW_FILE_MODS', true );— esto bloquea la instalación de temas y plugins desde el admin, neutralizando el vector de instalación del ataque. Recordá quitarla cuando puedas actualizar (y no rompe el funcionamiento del sitio, solo la gestión de archivos por UI). - Revisá los IoCs de arriba en tus logs y en
wp-content/themes/: cualquier tema que no hayas instalado es señal de alerta, especialmentemobile-repair-zoneo slugs de temas del catálogo que nunca usaste. - Auditá qué temas tenés instalados: borrá los que no uses (un tema inactivo sigue siendo código ejecutable en tu servidor — la lección de esta cadena). Si un tema que usás registra handlers
wp_ajax_*para instalar plugins sincheck_ajax_referer()nicurrent_user_can(), consideralo un riesgo activo y reemplazalo. - Actualizá los otros 10 fixes de seguridad del release: con la actualización a 7.1.1 cerrás de una también los demás correcciones (XSS, bypass de autorización, divulgación de información, path traversal) — por eso es un release de seguridad y no una actualización cosmética.
- Si sos agencia: revisá todos los sitios de clientes (uno solo vulnerable compromete la red entera), y si tenés control sobre el hosting, confirmá que las actualizaciones automáticas de Core estén activas — es lo que salvó a la mayoría de sitios en wp2shell.
TL;DR: Click2Shell es una cadena crítica en WordPress Core (< 7.1.1): un link manipulado + un click de un admin instala un tema del catálogo oficial sin que se note (queda inactivo) y, encadenado con fallas pre-activación de algunos temas (Mobile Repair Zone 2.5.4, +40 más), permite ejecutar código en el servidor. Parcheado en 7.1.1 (17/09/2026), sin explotación activa reportada pero con PoC público desde el 18/09. Actualizá a 7.1.1 hoy, verificá la versión real de cada sitio, revisá los IoCs en logs y wp-content/themes/, y si no podés actualizar ya, bloqueá la instalación de archivos con DISALLOW_FILE_MODS.
Fuentes
- WordPress.org — WordPress 7.1.1 Maintenance and Security Release (17/09/2026)
- pwn.ai — Click2Shell: Preauth WordPress Core Theme Preview Injection to RCE Chain (18/09/2026)
- The Hacker News — New WordPress Click2Shell Flaw Forces Theme Installs, Can Chain to Code Execution (18/09/2026)
- WordPress Core Trac — changeset 63664 (parche:
$.escapeSelector()) - LavX News — WordPress Patches Click2Shell Flaw That Forces Theme Installs (18/09/2026)
Seguí leyendo
¿Tu WordPress está caído, hackeado o querés protegerlo antes de que pase? Te ayudo a recuperarlo y blindarlo.
Solicitar diagnóstico