
Escáner de seguridad de WordPress de solo lectura para servidores HestiaCP. Detecta indicadores de compromiso de wp2shell (CVE-2026-63030 / CVE-2026-60137) en todos los sitios alojados — informes por correo electrónico por usuario, diff de archivos principales contra una instalación limpia de WordPress, análisis de PHP/JS/htaccess/imágenes y evaluación opcional de IA mediante la API de Claude.
Escáner de seguridad de WordPress de solo lectura para servidores HestiaCP.
Detecta indicadores de compromiso de wp2shell en todos los sitios alojados — con informes por correo por cliente, diff de archivos del núcleo, detección de webshells por SHA256, puntuación de riesgo y evaluación opcional con IA.
⚠️ Versiones seguras: WordPress 6.8.6 / 6.9.5 / 7.0.2 o posteriores.
Estos scripts nunca modifican nada: solo lectura en todo momento.
wp2shell es una cadena de ejecución remota de código (RCE) previa a la autenticación en el núcleo de WordPress, revelada el 17 de julio de 2026. Una única petición HTTP anónima contra una instalación por defecto basta para crear un administrador fraudulento y ejecutar código arbitrario en el servidor.
La cadena combina:
author__not_in de WP_Query/wp-json/batch/v1 de la API RESTLos sitios comprometidos muestran un administrador fraudulento con el prefijo de acceso wp2_ y el correo @wp2shell.invalid.
Más información: https://wp2shell.com
| Archivo | Propósito |
|---|---|
wp2shell-scan.sh | Escáner IoC rápido para todo el servidor: salida en terminal con códigos de color, puntuación de riesgo por sitio, informe guardado automáticamente en /root/ |
wp2shell-report-per-user.sh | Escáner completo: informes por correo por usuario de HestiaCP, diff del núcleo, detección de webshells por SHA256, evaluación con IA y puntuación de riesgo |
known_shells.sha256 | Base de datos de hashes SHA256 de webshells conocidos: se descarga automáticamente en tiempo de ejecución |
| Comprobación | Gravedad |
|---|---|
| Versión de WordPress frente a versiones seguras | HIGH / OK |
Cuentas con prefijo wp2_ o correo @wp2shell.invalid | CRITICAL |
| Administradores creados después de la revelación (15/07/2026) | MEDIUM |
| Huecos en la secuencia de ID de usuario (rastros de administrador fraudulento eliminado) | MEDIUM |
Filas huérfanas de wp_usermeta | MEDIUM |
Filas envenenadas de oembed_cache / customize_changeset | CRITICAL |
Opciones de WP alteradas (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Comprobación | Gravedad |
|---|---|
wp core verify-checksums frente a wp.org | HIGH |
diff -U5 línea por línea contra el núcleo limpio descargado | CRITICAL / HIGH / OK |
| Archivos adicionales que no existen en el núcleo limpio (se muestra contenido y metadatos) | CRITICAL / HIGH |
| Comprobación | Gravedad |
|---|---|
PHP en uploads/ | CRITICAL |
Extensiones PHP adicionales (.php7 .phtml .phar .php5) | HIGH |
| Coincidencia SHA256 con la base de datos de webshells conocidos (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modificado después de SINCE_DATE Y que coincide con patrones sospechosos, con la línea coincidente mostrada en línea | CRITICAL / HIGH |
| PHP con patrones sospechosos pero NO modificado recientemente | LOW |
JS/HTML modificados después de SINCE_DATE y que coinciden con patrones de ofuscación | MEDIUM |
| URLs externas de C2/exfiltración (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Directivas peligrosas de .htaccess (AddType, auto_prepend_file, RewriteRule externa) | HIGH |
.htaccess modificado después de SINCE_DATE | MEDIUM |
Imágenes poliglotas con payload PHP (<?php en .jpg/.png…) | CRITICAL |
Archivos de copia de seguridad/configuración expuestos (wp-config.php.bak, *.sql…) | MEDIUM |
| Comprobación | Gravedad |
|---|---|
Entradas de crontab de usuario con curl/wget/php/base64 | HIGH |
| Archivos cron del sistema que hacen referencia a la ruta del sitio | MEDIUM |
Cada sitio recibe una puntuación de riesgo de 0–100 con el desglose de cada hallazgo que contribuye:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Puntuación | Etiqueta |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wprootsendmail (para los informes por correo)python3 (para el manejo de JSON de la evaluación con IA)curl, sha256sum, file, strings, unzipcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
Nota: el escáner completo formula preguntas interactivas al inicio (evaluación con IA, guardar informe, umbral de fecha). Descargarlo primero y ejecutarlo después garantiza que las indicaciones funcionen correctamente.
sudo bash wp2shell-scan.sh
Busca todas las instalaciones de WordPress bajo /home/*/web/*/public_html/, ejecuta todas las comprobaciones, imprime en la terminal una salida con códigos de color y guarda un informe completo en /root/wp2shell-report-YYYYMMDD-HHMMSS.txt.
Al inicio pregunta por un umbral de fecha personalizado opcional (por defecto: 2026-07-15).
sudo bash wp2shell-report-per-user.sh
Al inicio, tres preguntas:
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
Empiece siempre con DRY_RUN=1 (el valor por defecto): los correos se previsualizan en pantalla y no se envía nada. Cambie a DRY_RUN=0 solo después de confirmar que la salida es correcta.
| Variable | Valor por defecto | Descripción |
|---|---|---|
WEB_ROOT | /home | Raíz web de HestiaCP |
SINCE_DATE | 2026-07-15 | Umbral de "modificado recientemente" |
WP | wp | Ruta a WP-CLI |