MagnoSec
Dashboard de WordPress con líneas de código malicioso representando una cadena crítica de exploits para instalar webshells sin contraseña

MagnoSec Blog

Cadena Crítica en WordPress Permite Instalar Webshells sin Conocer la Contraseña: Miles de Sitios en Riesgo

Por Equipo MagnoSec7 min de lectura

WordPress bajo fuego cruzado: dos fallos encadenados que instalan webshells sin credenciales

WordPress impulsa más del 40% de todos los sitios web del mundo. Es el CMS de blogs corporativos, tiendas online (WooCommerce), sitios institucionales, portales de noticias y webs de marca. Y es, proporcionalmente, el objetivo más atacado de internet. Esta vez, el vector son dos vulnerabilidades encadenadas en el ecosistema de plugins que permiten a un atacante instalar una webshell en el servidor sin conocer la contraseña del administrador. La primera vulnerabilidad permite saltarse la verificación de permisos en un plugin popular (con más de 500.000 instalaciones activas) para realizar acciones administrativas sin estar autenticado. La segunda permite cargar y ejecutar código PHP arbitrario, lo que el atacante aprovecha para instalar una webshell —un script PHP que le da acceso completo al servidor web—. Una vez instalada la webshell, el atacante puede modificar cualquier archivo del sitio, robar la base de datos completa (clientes, pedidos, usuarios, contraseñas), instalar malware que infecte a los visitantes, o utilizar el servidor como plataforma para atacar a otros sitios. Miles de sitios WordPress son comprometidos cada día mediante ataques automatizados que escanean internet en busca de instalaciones vulnerables. Si tu empresa tiene un sitio WordPress —aunque solo sea el blog corporativo—, este aviso te afecta.

El ecosistema de plugins de WordPress: 60.000 plugins, millones de instalaciones, una superficie de ataque inmensa

El ecosistema de plugins es el talón de Aquiles de WordPress. Hay más de 60.000 plugins disponibles en el repositorio oficial, más miles de plugins premium de terceros. Cada plugin que instalas añade nuevo código PHP a tu sitio, nuevo código que puede contener vulnerabilidades. La calidad del código de los plugins varía enormemente: desde plugins mantenidos por empresas especializadas con equipos de seguridad dedicados, hasta plugins abandonados por su desarrollador hace 3 años que siguen instalados en miles de sitios. El sitio WordPress típico de una empresa tiene entre 15 y 40 plugins instalados. Cada uno es una puerta potencial. Y lo que es peor, muchos plugins nunca se actualizan después de la instalación inicial —el administrador los instaló para añadir una funcionalidad, funcionó, y nadie volvió a pensar en ellos—. Un plugin con una vulnerabilidad conocida sin parchear es una puerta abierta con un cartel de 'entrada libre'. Los atacantes utilizan escáneres automatizados que enumeran los plugins instalados (muchos dejan fingerprints visibles en el HTML o en archivos públicos) y lanzan exploits específicos para las versiones vulnerables detectadas. Es un proceso industrializado: escanear, detectar, explotar, instalar webshell. Miles de sitios al día.

Así funciona la cadena: del bypass de autorización en el plugin a la ejecución de código PHP en el servidor

La cadena de ataque es técnicamente limpia y automatizable. Primera fase —detección—: el atacante escanea el sitio en busca de plugins vulnerables, típicamente mediante solicitudes a archivos específicos que revelan la presencia del plugin (readme.txt, archivos JavaScript, estilos CSS con nombres de plugin). Segunda fase —bypass de autorización—: la primera vulnerabilidad explota un endpoint AJAX del plugin que no verifica correctamente el nonce de seguridad (un token que debería prevenir solicitudes no autorizadas). El atacante envía una solicitud POST a este endpoint sin autenticación y el plugin la procesa como si viniera de un administrador legítimo. Tercera fase —instalación de webshell—: con los privilegios obtenidos, el atacante utiliza el endpoint de instalación de plantillas o el editor de archivos del plugin para subir un archivo PHP malicioso al directorio de uploads o al directorio del tema. Este archivo PHP es la webshell —un script que acepta comandos a través de parámetros HTTP y los ejecuta en el servidor—. Cuarta fase —persistencia—: el atacante instala múltiples webshells en diferentes ubicaciones (directorio de uploads, directorio de temas, directorio de plugins) y crea usuarios administradores ocultos en la base de datos de WordPress para poder volver a entrar aunque se detecte y elimine alguna de las webshells. Quinta fase —explotación—: con acceso completo al servidor, el atacante puede hacer prácticamente cualquier cosa: robar la base de datos, modificar el contenido del sitio, instalar malware SEO (spam de palabras clave ocultas), redirigir visitantes a sitios de phishing, usar el servidor para minar criptomonedas, o enviar emails de spam aprovechando la reputación del dominio.

El impacto: robo de datos de clientes, redirección a sitios de phishing, SEO spam y distribución de malware

El impacto de un sitio WordPress comprometido va más allá del propio sitio. Primero, los datos: la base de datos de WordPress contiene todos los usuarios registrados, sus emails y contraseñas hasheadas (que pueden ser crackeadas), todos los pedidos si es una tienda WooCommerce, todas las entradas del blog y sus metadatos. Una copia completa de esta base de datos está a la venta en foros de cibercrimen en menos de 24 horas. Segundo, la reputación: un sitio WordPress comprometido puede ser usado para alojar páginas de phishing que suplantan a bancos o servicios legítimos, redirigir tráfico a sitios maliciosos, o distribuir malware a sus visitantes. Google detecta estas actividades y marca el sitio como malicioso en los resultados de búsqueda —el temido aviso rojo de 'este sitio puede ser peligroso'—, lo que destruye el tráfico orgánico y la reputación de la marca. Tercero, el hosting: muchos sitios WordPress comparten servidor con otras aplicaciones corporativas. Si el atacante escapa del contexto de WordPress y compromete el servidor de hosting, todas las aplicaciones alojadas en ese servidor quedan comprometidas. Un blog corporativo desactualizado puede ser la puerta de entrada a toda la infraestructura web de la empresa.

Cómo MagnoSec audita sitios WordPress, plugins y configuraciones de seguridad en sus pentesting web

En MagnoSec, el pentesting de aplicaciones web incluye auditorías de sitios WordPress con un enfoque específico en el ecosistema de plugins. Enumeramos todos los plugins instalados y sus versiones, verificamos si hay vulnerabilidades conocidas sin parchear, comprobamos que los endpoints AJAX y REST API están correctamente protegidos con nonces y verificación de permisos, y realizamos pruebas de explotación controlada para confirmar si las vulnerabilidades detectadas son realmente explotables en el contexto específico del sitio. Verificamos también la configuración de hardening de WordPress: ¿el editor de archivos del panel de administración está desactivado? ¿Los directorios de uploads tienen deshabilitada la ejecución de PHP? ¿El prefijo de las tablas de la base de datos es el estándar (wp_) o ha sido personalizado? ¿Hay un WAF específico para WordPress (Wordfence, Sucuri) configurado correctamente? ¿Los backups incluyen verificación de integridad de archivos? WordPress es un CMS excelente, pero su seguridad depende casi enteramente de la higiene de sus plugins y la configuración de hardening. Un WordPress sin mantenimiento es un incidente esperando a ocurrir. Nosotros podemos decirte cuándo y cómo va a ocurrir.

Defensa: actualización de plugins, eliminación de plugins no utilizados, WAF y monitorización de integridad de archivos

La defensa de un sitio WordPress se basa en cinco prácticas fundamentales que deberían ser obligatorias. Primera: actualizar. WordPress core, plugins y temas deben actualizarse en cuanto se publica una nueva versión, especialmente si es un parche de seguridad. Activa las actualizaciones automáticas para todo. Un plugin que no se ha actualizado en 6 meses es un plugin que probablemente tiene vulnerabilidades conocidas sin parchear. Segunda: eliminar. Cada plugin que no es estrictamente necesario debe ser desinstalado, no solo desactivado. Un plugin desactivado sigue estando en el servidor y puede ser explotado si el atacante conoce la ruta. Tercera: endurecer. Desactiva el editor de archivos del panel de administración, deshabilita la ejecución de PHP en el directorio de uploads, usa un prefijo de base de datos no estándar, implementa autenticación de dos factores para todos los administradores, y limita los intentos de login. Cuarta: monitorizar. Instala un plugin de seguridad (Wordfence, Sucuri, Solid Security) que monitorice cambios en los archivos del sitio y alerte sobre modificaciones no autorizadas —si aparece un archivo PHP nuevo en el directorio de uploads, deberías saberlo en minutos, no en semanas—. Quinta: respaldar. Haz backups automáticos diarios del sitio y de la base de datos, almacenados fuera del servidor de hosting. Si el sitio es comprometido y tienes que reconstruirlo desde cero, un backup limpio de ayer es la diferencia entre una hora de trabajo y un desastre. WordPress es seguro si se mantiene. El problema nunca es WordPress: es el plugin que instalaste hace 2 años, que nunca actualizaste y que tiene un CVE con CVSS 9.8 desde el año pasado. Ese plugin es el que usan para entrar.

Temas tratados

WordPress · webshell · plugins · cadena crítica · RCE · CMS · web security · bypass autorización

¿Quieres saber si tu empresa tiene estas vulnerabilidades?

Auditamos la seguridad de empresas de toda España con alcance cerrado por escrito, informe técnico y ejecutivo, y retest de las correcciones. Presupuesto en 24 horas y primera consultoría sin coste. Si no sabes por dónde empezar, haz el test de seguridad de 15 preguntas.

¿Quieres más información?