
wp2shell-Hestia-Scanner — Actualizado!
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.
🛡️ wp2shell-Hestia-Scanner
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.
🇬🇧 English
¿Qué es wp2shell?
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:
- CVE-2026-60137 — inyección SQL en el parámetro
author__not_indeWP_Query - CVE-2026-63030 — confusión de rutas en el endpoint
/wp-json/batch/v1de la API REST
Los sitios comprometidos muestran un administrador fraudulento con el prefijo de acceso wp2_ y el correo @wp2shell.invalid.
Más información: https://wp2shell.com
Contenido del repositorio
| 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 |
Qué comprueba el escáner
Comprobaciones de base de datos / usuarios
| 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 |
Integridad de los archivos del núcleo
| 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 |
Análisis de archivos
| 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 |
Persistencia
| 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 |
Puntuación de riesgo
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 |
Requisitos
- Servidor Linux con HestiaCP
- bash 4.0+
- WP-CLI instalado globalmente como
wp - Acceso
root sendmail(para los informes por correo)python3(para el manejo de JSON de la evaluación con IA)curl,sha256sum,file,strings,unzip
Instalar WP-CLI (si falta)
curl -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
Instalación y ejecución en una sola línea
Escaneo IoC rápido
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
Escaneo completo con informes por correo por cliente
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.
Uso
wp2shell-scan.sh — escaneo rápido en todo el servidor
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).
wp2shell-report-per-user.sh — escaneo completo con informes por correo
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.
Configuración
wp2shell-scan.sh
| 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 |
wp2shell-report-per-user.sh
| 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 |
Evaluación con IA (opcional)
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.
¿Sin clave de API? Use el analizador en el navegador
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.
Formato de salida
Niveles de gravedad
| 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 |
Ejemplo de diff del núcleo
┌─ 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='));
└──────────────────────────────────────
Notas
- El escáner nunca modifica nada. Se puede ejecutar de forma segura en servidores de producción en vivo.
- Actualizar WordPress a una versión parcheada cierra la vulnerabilidad, pero no limpia un sitio ya comprometido. Si se encuentran indicadores, restaure desde una copia de seguridad limpia.
- El directorio
CORE_CACHE(/root/wp2shell-cores/) se reutiliza entre escaneos. Elimínelo para forzar una descarga nueva. - La base de datos de hashes
known_shells.sha256se actualiza automáticamente una vez al día.
Licencia
GPL-3.0 — consulte LICENSE
Créditos
Desarrollado por BytesPulse en respuesta a la revelación de wp2shell (julio de 2026).
Información sobre CVE: https://wp2shell.com
🇬🇷 Ελληνικά
¿Qué es wp2shell?
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:
- CVE-2026-60137 — inyección SQL en el parámetro
author__not_indeWP_Query - CVE-2026-63030 — confusión de rutas en la API REST
/wp-json/batch/v1
Los sitios comprometidos muestran una cuenta de administrador con el prefijo wp2_ y el correo @wp2shell.invalid.
Más información: https://wp2shell.com
Contenido
| 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 |
Qué comprueba
Base de datos / Usuarios
| 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 |
Integridad de los archivos del núcleo
| 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 |
Análisis de archivos
| 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 |
Persistencia
| Comprobación | Gravedad |
|---|---|
Crontab de usuario con curl/wget/php/base64 | HIGH |
| Archivos cron del sistema que mencionan la ruta del sitio | MEDIUM |
Puntuación de riesgo
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 |
Requisitos
- Servidor Linux con HestiaCP
- bash 4.0+
- WP-CLI instalado como
wp - Acceso
root sendmail(para el envío de correos)python3(para la evaluación con IA)curl,sha256sum,file,strings,unzip
Instalación de WP-CLI (si falta)
curl -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
Instalación con una sola línea
Escaneo IoC rápido
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
Escaneo completo con informes por correo
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
Uso
wp2shell-scan.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/.
wp2shell-report-per-user.sh
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.
Configuración
wp2shell-scan.sh
| 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 |
wp2shell-report-per-user.sh
| 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 |
Evaluación con IA (opcional)
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.
¿Sin clave de API? Use el analizador en el navegador
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.
Notas
- El escáner no modifica nada. Ejecución segura en servidores de producción en vivo.
- Actualizar WordPress a la versión parcheada cierra la vulnerabilidad, pero no limpia un sitio ya comprometido. Si se encuentran indicadores, restaure desde una copia de seguridad limpia.
- La carpeta
CORE_CACHE(/root/wp2shell-cores/) se reutiliza entre escaneos. Elimínela para forzar una nueva descarga. - La base de datos
known_shells.sha256se actualiza automáticamente una vez cada 24 horas.
Licencia
GPL-3.0 — consulte LICENSE
Créditos
Desarrollado por BytesPulse en respuesta a la revelación de wp2shell (julio de 2026).
Información sobre CVE: https://wp2shell.com