
Leitor de segurança WordPress somente leitura para servidores HestiaCP. Detecta indicadores de comprometimento wp2shell (CVE-2026-63030 / CVE-2026-60137) em todos os sites hospedados — relatórios por e-mail por usuário, diff de arquivos principais contra WordPress limpo, análise de PHP/JS/htaccess/imagens e avaliação opcional de IA via Claude API.
Scanner de segurança WordPress somente leitura para servidores HestiaCP.
Detecta indicadores de comprometimento do wp2shell em todos os sites hospedados — com relatórios por e-mail por cliente, diff de arquivos do núcleo, detecção de webshells por SHA256, pontuação de risco e avaliação por IA opcional.
⚠️ Versões seguras: WordPress 6.8.6 / 6.9.5 / 7.0.2 ou mais recente.
Estes scripts nunca modificam nada — somente leitura em todo o processo.
O wp2shell é uma cadeia de execução remota de código (RCE) pré-autenticação no núcleo do WordPress, divulgada em 17 de julho de 2026. Uma única requisição HTTP anônima contra uma instalação padrão é suficiente para criar um administrador malicioso e executar código arbitrário no servidor.
A cadeia combina:
author__not_in do WP_Query/wp-json/batch/v1 da API RESTSites comprometidos exibem um administrador malicioso com prefixo de login wp2_ e e-mail @wp2shell.invalid.
Mais informações: https://wp2shell.com
| Arquivo | Finalidade |
|---|---|
wp2shell-scan.sh | Scanner rápido de IoC em todo o servidor — saída colorida no terminal, pontuação de risco por site, relatório salvo automaticamente em /root/ |
wp2shell-report-per-user.sh | Scanner completo — relatórios por e-mail por usuário HestiaCP, diff de arquivos do núcleo, detecção de webshells por SHA256, avaliação por IA, pontuação de risco |
known_shells.sha256 | Base de dados de hashes de webshells conhecidos (SHA256) — baixada automaticamente em tempo de execução |
| Verificação | Gravidade |
|---|---|
| Versão do WordPress vs. versões seguras | HIGH / OK |
Contas com prefixo wp2_ ou e-mail @wp2shell.invalid | CRITICAL |
| Administradores criados após a divulgação (15/07/2026) | MEDIUM |
| Lacunas na sequência de IDs de usuário (vestígios de administrador malicioso removido) | MEDIUM |
Linhas órfãs em wp_usermeta | MEDIUM |
Linhas envenenadas em oembed_cache / customize_changeset | CRITICAL |
Opções do WP adulteradas (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Verificação | Gravidade |
|---|---|
wp core verify-checksums vs. wp.org | HIGH |
Diff diff -U5 linha por linha contra o núcleo limpo baixado | CRITICAL / HIGH / OK |
| Arquivos extras não presentes no núcleo limpo (conteúdo + metadados exibidos) | CRITICAL / HIGH |
| Verificação | Gravidade |
|---|---|
PHP em uploads/ | CRITICAL |
Extensões PHP extras (.php7 .phtml .phar .php5) | HIGH |
| Correspondência SHA256 com a base de dados de webshells conhecidos (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modificado após SINCE_DATE E com padrões suspeitos — com a linha correspondente exibida inline | CRITICAL / HIGH |
| PHP com padrões suspeitos, mas NÃO modificado recentemente | LOW |
JS/HTML modificados após SINCE_DATE E com padrões de ofuscação | MEDIUM |
| URLs externas de C2/exfiltração (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Diretivas perigosas no .htaccess (AddType, auto_prepend_file, RewriteRule externa) | HIGH |
.htaccess modificado após SINCE_DATE | MEDIUM |
Imagens poliglotas com payload PHP (<?php em .jpg/.png…) | CRITICAL |
Arquivos de backup/config expostos (wp-config.php.bak, *.sql…) | MEDIUM |
| Verificação | Gravidade |
|---|---|
Entradas de crontab de usuário com curl/wget/php/base64 | HIGH |
| Arquivos de cron do sistema que referenciam o caminho do site | MEDIUM |
Cada site recebe uma pontuação de risco de 0 a 100 com a decomposição de cada achado que contribuiu:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Pontuação | Classificação |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wprootsendmail (para relatórios por e-mail)python3 (para manipulação de JSON da avaliação por 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: O scanner completo faz perguntas interativas na inicialização (avaliação por IA, salvar relatório, limite de data). Baixar primeiro e depois executar garante que os prompts funcionem corretamente.
sudo bash wp2shell-scan.sh
Encontra todas as instalações do WordPress sob /home/*/web/*/public_html/, executa todas as verificações, imprime saída colorida no terminal e salva um relatório completo em /root/wp2shell-report-YYYYMMDD-HHMMSS.txt.
Na inicialização, pergunta por um limite de data personalizado opcional (padrão: 2026-07-15).
sudo bash wp2shell-report-per-user.sh
Na inicialização, três perguntas:
[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]:
Comece sempre com DRY_RUN=1 (o padrão) — os e-mails são pré-visualizados na tela, nada é enviado. Altere para DRY_RUN=0 somente depois de confirmar que a saída parece correta.
| Variável | Padrão | Descrição |
|---|---|---|
WEB_ROOT | /home | Raiz web do HestiaCP |
SINCE_DATE | 2026-07-15 | Limite de "modificado recentemente" |
WP | wp | Caminho para o WP-CLI |
| Variável | Padrão | Descrição |
|---|---|---|
DRY_RUN | 1 | 1 = apenas pré-visualização, 0 = enviar e-mails |
SEND_ONLY_IF_ISSUES | 0 | 1 = pular o e-mail se o site estiver limpo |
SINCE_DATE | 2026-07-15 | Limite de "modificado recentemente" |
MAIL_FROM | security@<hostname> | Remetente do envelope |
CORE_CACHE | /root/wp2shell-cores | Diretório de cache do núcleo limpo |
ANTHROPIC_API_KEY | (vazio) | Chave da API Claude para avaliação por IA |
Para diffs ambíguos que apenas os padrões não conseguem classificar, o scanner envia o diff para a API Claude (claude-sonnet-4-6) e retorna um veredito: DANGER, SUSPICIOUS, REVIEW ou OK com uma explicação de uma frase. A IA é usada apenas na zona cinzenta — casos claros são classificados instantaneamente, sem nenhuma chamada de API.
Defina sua chave no script ou exporte antes de executar:
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Chaves de API: https://console.anthropic.com — separadas das assinaturas do claude.ai.
Cole a saída da sua varredura no artefato wp2shell Report Analyzer no Claude.ai — ele realiza a mesma avaliação por IA diretamente no navegador, sem exigir a sua própria chave.
| Rótulo | Cor | Significado |
|---|---|---|
[CRITICAL] | 🔴 Vermelho em negrito | Indicador de comprometimento ativo — aja imediatamente |
[HIGH] | 🔴 Vermelho | Indicador forte — revise com urgência |
[MEDIUM] | 🟡 Amarelo | Suspeito — investigue |
[LOW] | 🔵 Azul | Prioridade baixa — provavelmente falso positivo |
[INFO] | ⚫ Cinza | Informativo |
[OK] | 🟢 Verde | Limpo / 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/) é reutilizado entre varreduras. Exclua-o para forçar um novo download.known_shells.sha256 é atualizada automaticamente uma vez por dia.GPL-3.0 — veja LICENSE
Desenvolvido por BytesPulse em resposta à divulgação do wp2shell (julho de 2026).
Informações sobre CVE: https://wp2shell.com
O wp2shell é uma cadeia de execução remota de código (RCE) pré-autenticação no núcleo do WordPress, divulgada em 17 de julho de 2026. Uma única requisição HTTP anônima contra uma instalação padrão é suficiente para criar um administrador e executar código arbitrário no servidor.
A cadeia combina:
author__not_in do WP_Query/wp-json/batch/v1 da API RESTSites comprometidos exibem uma conta de administrador com prefixo wp2_ e e-mail @wp2shell.invalid.
Mais informações: https://wp2shell.com
| Arquivo | Finalidade |
|---|---|
wp2shell-scan.sh | Scanner rápido de IoC — saída colorida no terminal, pontuação de risco por site, relatório salvo automaticamente em /root/ |
wp2shell-report-per-user.sh | Scanner completo — relatórios por e-mail por usuário HestiaCP, diff do núcleo, detecção de webshells por SHA256, avaliação por IA, pontuação de risco |
known_shells.sha256 | Base de dados de hashes SHA256 de webshells conhecidos — baixada automaticamente durante a execução |
| Verificação | Gravidade |
|---|---|
| Versão do WordPress vs. versões seguras | HIGH / OK |
Contas com prefixo wp2_ ou e-mail @wp2shell.invalid | CRITICAL |
| Administradores criados após a divulgação (15/07/2026) | MEDIUM |
| Lacunas na sequência de IDs de usuário (vestígios de administrador malicioso excluído) | MEDIUM |
Linhas órfãs em wp_usermeta | MEDIUM |
Linhas envenenadas em oembed_cache / customize_changeset | CRITICAL |
Opções do WP adulteradas (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Verificação | Gravidade |
|---|---|
wp core verify-checksums vs. wp.org | HIGH |
Diff diff -U5 linha por linha contra o núcleo limpo | CRITICAL / HIGH / OK |
| Arquivos extras que não existem no núcleo limpo | CRITICAL / HIGH |
| Verificação | Gravidade |
|---|---|
Arquivos PHP em uploads/ | CRITICAL |
Extensões PHP extras (.php7 .phtml .phar .php5) | HIGH |
| Correspondência SHA256 com webshells conhecidos (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modificado após SINCE_DATE E contendo padrão suspeito — com a linha exata | CRITICAL / HIGH |
| PHP com padrões suspeitos que NÃO foi modificado recentemente | LOW |
JS/HTML modificados após SINCE_DATE com padrões de ofuscação | MEDIUM |
| URLs externas de C2/exfiltração de dados (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Diretivas perigosas no .htaccess | HIGH |
.htaccess modificado após SINCE_DATE | MEDIUM |
| Imagens poliglotas com payload PHP | CRITICAL |
| Arquivos de backup/config expostos | MEDIUM |
| Verificação | Gravidade |
|---|---|
Crontab de usuário com curl/wget/php/base64 | HIGH |
| Arquivos de cron do sistema que referenciam o caminho do site | MEDIUM |
Cada site recebe uma pontuação de 0 a 100 com a decomposição de cada achado:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Pontuação | Classificação |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wprootsendmail (para envio de e-mails)python3 (para avaliação por 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
Encontra automaticamente todas as instalações do WordPress sob /home/*/web/*/public_html/, executa todas as verificações, imprime saída colorida no terminal e salva um relatório completo em /root/.
sudo bash wp2shell-report-per-user.sh
Na inicialização, faz três perguntas:
[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]:
Comece sempre com DRY_RUN=1 (o padrão) — os e-mails aparecem na tela, não são enviados. Altere para DRY_RUN=0 somente depois de confirmar que a saída está correta.
| Variável | Padrão | Descrição |
|---|---|---|
WEB_ROOT | /home | Diretório raiz do HestiaCP |
SINCE_DATE | 2026-07-15 | Limite de "modificado recentemente" |
WP | wp | Caminho do WP-CLI |
| Variável | Padrão | Descrição |
|---|---|---|
DRY_RUN | 1 | 1 = apenas pré-visualização, 0 = envio de e-mails |
SEND_ONLY_IF_ISSUES | 0 | 1 = e-mail somente se algo for encontrado |
SINCE_DATE | 2026-07-15 | Limite de "modificado recentemente" |
MAIL_FROM | security@<hostname> | E-mail do remetente |
CORE_CACHE | /root/wp2shell-cores | Cache de núcleos limpos |
ANTHROPIC_API_KEY | (vazio) | Chave da API Claude para avaliação por IA |
Para diffs ambíguos que os padrões não conseguem classificar, o scanner envia o diff para a API Claude (claude-sonnet-4-6) e retorna um veredito: DANGER, SUSPICIOUS, REVIEW ou OK com uma explicação de uma frase. A IA é usada apenas na zona cinzenta.
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Chaves de API: https://console.anthropic.com — separadas da assinatura do claude.ai.
Cole a saída da varredura no artefato wp2shell Report Analyzer no Claude.ai — ele executa a mesma avaliação por IA diretamente no navegador.
CORE_CACHE (/root/wp2shell-cores/) é reutilizado entre varreduras. Exclua-o para forçar um novo download.known_shells.sha256 é atualizada automaticamente uma vez a cada 24 horas.GPL-3.0 — veja LICENSE
Desenvolvido por BytesPulse em resposta à divulgação do wp2shell (julho de 2026).
Informações sobre CVE: https://wp2shell.com