
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 |
| Variable | Valor por defecto | Descripción |
|---|---|---|
DRY_RUN | 1 | 1 = solo vista previa, 0 = enviar correos |
SEND_ONLY_IF_ISSUES | 0 | 1 = omitir el correo si el sitio está limpio |
SINCE_DATE | 2026-07-15 | Umbral de "modificado recientemente" |
MAIL_FROM | security@<hostname> | Remitente del sobre |
CORE_CACHE | /root/wp2shell-cores | Directorio de caché de núcleos limpios |
ANTHROPIC_API_KEY | (vacío) | Clave de API de Claude para la evaluación con IA |
Para los diffs ambiguos que los patrones por sí solos no pueden clasificar, el escáner envía el diff a la API de Claude (claude-sonnet-4-6) y devuelve un veredicto: DANGER, SUSPICIOUS, REVIEW u OK, con una explicación de una frase. La IA se usa solo en la zona gris: los casos claros se clasifican al instante sin ninguna llamada a la API.
Defina su clave en el script o expórtela antes de ejecutarlo:
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Claves de API: https://console.anthropic.com — independientes de las suscripciones de claude.ai.
Pegue la salida de su escaneo en el artefacto wp2shell Report Analyzer de Claude.ai — realiza la misma evaluación con IA directamente en el navegador, sin necesidad de su propia clave.
| Etiqueta | Color | Significado |
|---|---|---|
[CRITICAL] | 🔴 Rojo en negrita | Indicador de compromiso activo: actúe de inmediato |
[HIGH] | 🔴 Rojo | Indicador contundente: revíselo con urgencia |
[MEDIUM] | 🟡 Amarillo | Sospechoso: investigue |
[LOW] | 🔵 Azul | Prioridad baja: probable falso positivo |
[INFO] | ⚫ Gris | Informativo |
[OK] | 🟢 Verde | Limpio / esperado |
┌─ MODIFIED: wp-includes/load.php
│ [CRITICAL] Assessment (patterns): executable/obfuscated pattern in added lines
│ +20 Core file modified with dangerous pattern
│
│ ORIGINAL: /root/wp2shell-cores/7.0.2-el/wp-includes/load.php
│ SITE: /home/user/web/example.gr/public_html/wp-includes/load.php
│ @@ -212,5 +212,6 @@
│ - $loaded = true;
│ + $loaded = true;
│ + eval(base64_decode('aGVsbG8='));
└──────────────────────────────────────
CORE_CACHE (/root/wp2shell-cores/) se reutiliza entre escaneos. Elimínelo para forzar una descarga nueva.known_shells.sha256 se actualiza automáticamente una vez al día.GPL-3.0 — consulte LICENSE
Desarrollado por BytesPulse en respuesta a la revelación de wp2shell (julio de 2026).
Información sobre CVE: https://wp2shell.com
wp2shell es una cadena de explotación de ejecución remota de código (RCE) en el núcleo de WordPress, revelada el 17 de julio de 2026. Una única petición HTTP anónima a una instalación por defecto basta para crear un administrador y ejecutar código arbitrario en el servidor.
La cadena combina:
author__not_in de WP_Query/wp-json/batch/v1Los sitios comprometidos muestran una cuenta de administrador con el prefijo wp2_ y el correo @wp2shell.invalid.
Más información: https://wp2shell.com
| Archivo | Propósito |
|---|---|
wp2shell-scan.sh | Escáner IoC rápido: salida en color en la terminal, 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 SHA256 de webshells conocidos: se descarga automáticamente durante la ejecución |
| Comprobación | Gravedad |
|---|---|
| Versión de WordPress frente a versiones seguras | HIGH / OK |
Cuentas con el 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 un núcleo limpio | CRITICAL / HIGH / OK |
| Archivos adicionales que no existen en el núcleo limpio | CRITICAL / HIGH |
| Comprobación | Gravedad |
|---|---|
Archivos PHP en uploads/ | CRITICAL |
Extensiones PHP adicionales (.php7 .phtml .phar .php5) | HIGH |
| Coincidencia SHA256 con webshells conocidos (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modificado después de SINCE_DATE Y que contiene patrones sospechosos, con la línea exacta | CRITICAL / HIGH |
| PHP con patrones sospechosos que NO se modificó recientemente | LOW |
JS/HTML modificados después de SINCE_DATE con patrones de ofuscación | MEDIUM |
| URLs externas de C2/exfiltración de datos (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Directivas peligrosas en .htaccess | HIGH |
.htaccess modificado después de SINCE_DATE | MEDIUM |
| Imágenes poliglotas con payload PHP | CRITICAL |
| Archivos de copia de seguridad/configuración expuestos | MEDIUM |
| Comprobación | Gravedad |
|---|---|
Crontab de usuario con curl/wget/php/base64 | HIGH |
| Archivos cron del sistema que mencionan la ruta del sitio | MEDIUM |
Cada sitio recibe una puntuación de 0–100 con el desglose de cada hallazgo:
+------------------------------------------+
| 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 el envío de correos)python3 (para 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
sudo bash wp2shell-scan.sh
Busca automáticamente todas las instalaciones de WordPress bajo /home/*/web/*/public_html/, ejecuta todas las comprobaciones, imprime una salida en color en la terminal y guarda un informe completo en /root/.
sudo bash wp2shell-report-per-user.sh
Al inicio hace 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 (valor por defecto): los correos se muestran en pantalla, no se envían. Cambie a DRY_RUN=0 solo después de confirmar que la salida es correcta.
| Variable | Valor por defecto | Descripción |
|---|---|---|
WEB_ROOT | /home | Carpeta raíz de HestiaCP |
SINCE_DATE | 2026-07-15 | Umbral de "modificados recientemente" |
WP | wp | Ruta de WP-CLI |
| Variable | Valor por defecto | Descripción |
|---|---|---|
DRY_RUN | 1 | 1 = solo vista previa, 0 = envío de correos |
SEND_ONLY_IF_ISSUES | 0 | 1 = correo solo si se encuentra algo |
SINCE_DATE | 2026-07-15 | Umbral de "modificados recientemente" |
MAIL_FROM | security@<hostname> | Remitente del correo |
CORE_CACHE | /root/wp2shell-cores | Caché de núcleos limpios |
ANTHROPIC_API_KEY | (vacío) | Clave de API de Claude para la evaluación con IA |
Para los diffs dudosos que los patrones no pueden clasificar, el escáner envía el diff a la API de Claude (claude-sonnet-4-6) y devuelve un veredicto: DANGER, SUSPICIOUS, REVIEW u OK, con una explicación de una frase. La IA se usa solo en la zona gris.
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Claves de API: https://console.anthropic.com — independientes de la suscripción de claude.ai.
Pegue la salida del escaneo en el artefacto wp2shell Report Analyzer de Claude.ai — realiza la misma evaluación con IA directamente en el navegador.
CORE_CACHE (/root/wp2shell-cores/) se reutiliza entre escaneos. Elimínela para forzar una nueva descarga.known_shells.sha256 se actualiza automáticamente una vez cada 24 horas.GPL-3.0 — consulte LICENSE
Desarrollado por BytesPulse en respuesta a la revelación de wp2shell (julio de 2026).
Información sobre CVE: https://wp2shell.com