
wp2shell-Hestia-Scanner — Updated!
Scanner di sicurezza WordPress read-only per server HestiaCP. Rileva gli indicatori di compromissione wp2shell (CVE-2026-63030 / CVE-2026-60137) su tutti i siti ospitati — report via email per utente, diff dei file principali rispetto a un WordPress pulito, analisi di PHP/JS/htaccess/immagini e valutazione AI opzionale tramite Claude API.
🛡️ wp2shell-Hestia-Scanner
Scanner di sicurezza WordPress in sola lettura per server HestiaCP.
Rileva gli indicatori di compromissione wp2shell su tutti i siti ospitati — con report email per cliente, diff dei file del core, rilevamento webshell SHA256, punteggio di rischio e valutazione AI opzionale.
⚠️ Versioni sicure: WordPress 6.8.6 / 6.9.5 / 7.0.2 o successive.
Questi script non modificano mai nulla — sola lettura in ogni momento.
🇬🇧 English
Cos'è wp2shell?
wp2shell è una catena di esecuzione remota di codice (RCE) pre-autenticazione nel core di WordPress, divulgata il 17 luglio 2026. Una singola richiesta HTTP anonima verso un'installazione predefinita è sufficiente per creare un amministratore rogue ed eseguire codice arbitrario sul server.
La catena combina:
- CVE-2026-60137 — SQL injection nel parametro
author__not_indiWP_Query - CVE-2026-63030 — Route confusion nell'endpoint
/wp-json/batch/v1dell'API REST
I siti compromessi mostrano un admin rogue con prefisso di login wp2_ ed email @wp2shell.invalid.
Maggiori informazioni: https://wp2shell.com
Contenuto del repository
| File | Scopo |
|---|---|
wp2shell-scan.sh | Scanner IoC rapido a livello di server — output a terminale colorato, punteggio di rischio per sito, report salvato automaticamente in /root/ |
wp2shell-report-per-user.sh | Scanner completo — report email per utente HestiaCP, diff dei file del core, rilevamento webshell SHA256, valutazione AI, punteggio di rischio |
known_shells.sha256 | Database di hash di webshell note (SHA256) — scaricato automaticamente a runtime |
Cosa controlla lo scanner
Controlli su database / utenti
| Controllo | Gravità |
|---|---|
| Versione di WordPress rispetto alle versioni sicure | HIGH / OK |
Account con prefisso wp2_ o email @wp2shell.invalid | CRITICAL |
| Amministratori creati dopo la divulgazione (15/07/2026) | MEDIUM |
| Lacune nella sequenza degli user-ID (tracce di admin rogue eliminati) | MEDIUM |
Righe orfane in wp_usermeta | MEDIUM |
Righe avvelenate in oembed_cache / customize_changeset | CRITICAL |
Opzioni WordPress manomesse (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
Integrità dei file del core
| Controllo | Gravità |
|---|---|
wp core verify-checksums rispetto a wp.org | HIGH |
diff -U5 riga per riga rispetto al core pulito scaricato | CRITICAL / HIGH / OK |
| File extra non presenti nel core pulito (contenuto e metadati mostrati) | CRITICAL / HIGH |
Analisi dei file
| Controllo | Gravità |
|---|---|
PHP in uploads/ | CRITICAL |
Estensioni PHP aggiuntive (.php7 .phtml .phar .php5) | HIGH |
| Corrispondenza SHA256 con il database di webshell note (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modificato dopo SINCE_DATE E corrispondente a pattern sospetti — con la riga corrispondente mostrata inline | CRITICAL / HIGH |
| PHP con pattern sospetti ma NON modificato di recente | LOW |
JS/HTML modificati dopo SINCE_DATE e corrispondenti a pattern di offuscamento | MEDIUM |
| URL C2/esfiltrazione esterni (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Direttive pericolose in .htaccess (AddType, auto_prepend_file, RewriteRule esterna) | HIGH |
.htaccess modificato dopo SINCE_DATE | MEDIUM |
Immagini poliglotte con payload PHP (<?php in .jpg/.png…) | CRITICAL |
File di backup/configurazione esposti (wp-config.php.bak, *.sql…) | MEDIUM |
Persistenza
| Controllo | Gravità |
|---|---|
Voci crontab utente con curl/wget/php/base64 | HIGH |
| File cron di sistema che fanno riferimento al percorso del sito | MEDIUM |
Punteggio di rischio
Ogni sito riceve un punteggio di rischio da 0–100 con il dettaglio di ogni risultato che contribuisce al punteggio:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Punteggio | Etichetta |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
Requisiti
- Server Linux con HestiaCP
- bash 4.0+
- WP-CLI installato globalmente come
wp - Accesso
root sendmail(per i report email)python3(per la gestione JSON della valutazione AI)curl,sha256sum,file,strings,unzip
Installare WP-CLI (se mancante)
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
Installazione ed esecuzione in un'unica riga
Scansione IoC rapida
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
Scansione completa con report email per 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: lo scanner completo pone domande interattive all'avvio (valutazione AI, salvataggio report, soglia data). Scaricare prima il file e poi eseguirlo garantisce che le domande funzionino correttamente.
Utilizzo
wp2shell-scan.sh — scansione rapida a livello di server
sudo bash wp2shell-scan.sh
Trova tutte le installazioni WordPress in /home/*/web/*/public_html/, esegue tutti i controlli, stampa un output colorato sul terminale e salva un report completo in /root/wp2shell-report-YYYYMMDD-HHMMSS.txt.
All'avvio chiede una soglia data personalizzata opzionale (predefinita: 2026-07-15).
wp2shell-report-per-user.sh — scansione completa con report email
sudo bash wp2shell-report-per-user.sh
All'avvio, tre domande:
[AI EVALUATION] Usare la valutazione AI per i file ambigui? [y/N]
[SAVE REPORT] Salvare un report completo per una revisione successiva? [y/N]
[DATE THRESHOLD] Usare una data diversa? Lasciare vuoto per mantenere il default [YYYY-MM-DD]:
Iniziare sempre con DRY_RUN=1 (il default) — le email vengono visualizzate in anteprima sullo schermo, non viene inviato nulla. Passare a DRY_RUN=0 solo dopo aver confermato che l'output sia corretto.
Configurazione
wp2shell-scan.sh
| Variabile | Default | Descrizione |
|---|---|---|
WEB_ROOT | /home | Web root di HestiaCP |
SINCE_DATE | 2026-07-15 | Soglia "modificato di recente" |
WP | wp | Percorso di WP-CLI |
wp2shell-report-per-user.sh
| Variabile | Default | Descrizione |
|---|---|---|
DRY_RUN | 1 | 1 = solo anteprima, 0 = invia email |
SEND_ONLY_IF_ISSUES | 0 | 1 = salta l'email se il sito è pulito |
SINCE_DATE | 2026-07-15 | Soglia "modificato di recente" |
MAIL_FROM | security@<hostname> | Mittente della busta (envelope sender) |
CORE_CACHE | /root/wp2shell-cores | Directory cache dei core puliti |
ANTHROPIC_API_KEY | (vuoto) | Chiave API Claude per la valutazione AI |
Valutazione AI (opzionale)
Per i diff ambigui che i pattern da soli non riescono a classificare, lo scanner invia il diff alla Claude API (claude-sonnet-4-6) e restituisce un verdetto: DANGER, SUSPICIOUS, REVIEW o OK con una spiegazione di una frase. L'AI viene utilizzata solo nella zona grigia — i casi chiari vengono classificati istantaneamente senza alcuna chiamata API.
Impostare la propria chiave nello script oppure esportarla prima di eseguire:
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
Chiavi API: https://console.anthropic.com — separate dagli abbonamenti di claude.ai.
Nessuna chiave API? Usare l'analizzatore nel browser
Incollare l'output della scansione nell'artifact wp2shell Report Analyzer su Claude.ai — esegue la stessa valutazione AI direttamente nel browser senza richiedere una chiave personale.
Formato dell'output
Livelli di gravità
| Etichetta | Colore | Significato |
|---|---|---|
[CRITICAL] | 🔴 Rosso in grassetto | Indicatore di compromissione attiva — agire immediatamente |
[HIGH] | 🔴 Rosso | Indicatore forte — verificare con urgenza |
[MEDIUM] | 🟡 Giallo | Sospetto — approfondire |
[LOW] | 🔵 Blu | Priorità bassa — probabile falso positivo |
[INFO] | ⚫ Grigio | Informativo |
[OK] | 🟢 Verde | Pulito / previsto |
Esempio di diff del core
┌─ 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='));
└──────────────────────────────────────
Note
- Lo scanner non modifica mai nulla. Sicuro da eseguire su server di produzione live.
- L'aggiornamento di WordPress a una versione patchata chiude la vulnerabilità ma non pulisce un sito già compromesso. Se vengono trovati indicatori, ripristinare da un backup pulito.
- La directory
CORE_CACHE(/root/wp2shell-cores/) viene riutilizzata tra le scansioni. Eliminarla per forzare un nuovo download. - Il database di hash
known_shells.sha256viene aggiornato automaticamente una volta al giorno.
Licenza
GPL-3.0 — consultare LICENSE
Crediti
Sviluppato da BytesPulse in risposta alla divulgazione di wp2shell (luglio 2026).
Informazioni CVE: https://wp2shell.com
🇬🇷 Ελληνικά
Cos'è wp2shell?
wp2shell è una catena di esecuzione remota di codice (RCE) pre-autenticazione nel core di WordPress, divulgata il 17 luglio 2026. Una singola richiesta HTTP anonima verso un'installazione predefinita è sufficiente per creare un amministratore ed eseguire codice arbitrario sul server.
La catena combina:
- CVE-2026-60137 — SQL injection nel parametro
author__not_indiWP_Query - CVE-2026-63030 — Route confusion nell'API REST
/wp-json/batch/v1
I siti compromessi mostrano un account amministratore con prefisso wp2_ ed email @wp2shell.invalid.
Maggiori informazioni: https://wp2shell.com
Contenuti
| File | Scopo |
|---|---|
wp2shell-scan.sh | Scanner IoC rapido — output colorato nel terminale, punteggio di rischio per sito, salvataggio automatico del report in /root/ |
wp2shell-report-per-user.sh | Scanner completo — report email per utente HestiaCP, diff del core, rilevamento webshell SHA256, valutazione AI, punteggio di rischio |
known_shells.sha256 | Database SHA256 di webshell note — scaricato automaticamente durante l'esecuzione |
Cosa controlla
Controlli su database / utenti
| Controllo | Gravità |
|---|---|
| Versione di WordPress rispetto alle versioni sicure | HIGH / OK |
Account con prefisso wp2_ o email @wp2shell.invalid | CRITICAL |
| Amministratori creati dopo la divulgazione (15/07/2026) | MEDIUM |
| Lacune nella sequenza user-ID (tracce di rogue admin eliminato) | MEDIUM |
Righe orfane in wp_usermeta | MEDIUM |
Righe avvelenate in oembed_cache / customize_changeset | CRITICAL |
Opzioni WP manomesse (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
Integrità dei file del core
| Controllo | Gravità |
|---|---|
wp core verify-checksums rispetto a wp.org | HIGH |
diff -U5 riga per riga rispetto al core pulito | CRITICAL / HIGH / OK |
| File extra non presenti nel core pulito | CRITICAL / HIGH |
Analisi dei file
| Controllo | Gravità |
|---|---|
File PHP in uploads/ | CRITICAL |
Estensioni PHP aggiuntive (.php7 .phtml .phar .php5) | HIGH |
| Corrispondenza SHA256 con webshell note (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP modificato dopo SINCE_DATE E con pattern sospetti — con la riga esatta mostrata | CRITICAL / HIGH |
| PHP con pattern sospetti ma NON modificato di recente | LOW |
JS/HTML modificati dopo SINCE_DATE con pattern di offuscamento | MEDIUM |
| URL C2/esfiltrazione esterni (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Direttive pericolose in .htaccess | HIGH |
.htaccess modificato dopo SINCE_DATE | MEDIUM |
| Immagini poliglotte con payload PHP | CRITICAL |
| File di backup/configurazione esposti | MEDIUM |
Persistenza
| Controllo | Gravità |
|---|---|
Crontab utente con curl/wget/php/base64 | HIGH |
| File cron di sistema che fanno riferimento al path del sito | MEDIUM |
Punteggio di rischio
Ogni sito riceve un punteggio da 0–100 con il dettaglio di ogni risultato:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Punteggio | Categoria |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
Requisiti
- Server Linux con HestiaCP
- bash 4.0+
- WP-CLI installato come
wp - Accesso
root sendmail(per l'invio di email)python3(per la valutazione AI)curl,sha256sum,file,strings,unzip
Installazione di WP-CLI (se mancante)
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
Installazione con una sola riga
Scanner IoC rapido
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
Scanner completo con report email
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
Utilizzo
wp2shell-scan.sh
sudo bash wp2shell-scan.sh
Trova automaticamente tutte le installazioni WordPress in /home/*/web/*/public_html/, esegue tutti i controlli, stampa un output colorato nel terminale e salva un report completo in /root/.
wp2shell-report-per-user.sh
sudo bash wp2shell-report-per-user.sh
All'avvio pone tre domande:
[AI EVALUATION] Usare la valutazione AI per i file ambigui? [y/N]
[SAVE REPORT] Salvare un report completo in un file? [y/N]
[DATE THRESHOLD] Data diversa? Lasciare vuoto per il default [YYYY-MM-DD]:
Iniziare sempre con DRY_RUN=1 (default) — le email vengono visualizzate sullo schermo, non vengono inviate. Passare a DRY_RUN=0 solo dopo aver confermato che l'output sia corretto.
Impostazioni
wp2shell-scan.sh
| Variabile | Default | Descrizione |
|---|---|---|
WEB_ROOT | /home | Directory root di HestiaCP |
SINCE_DATE | 2026-07-15 | Soglia "modificati di recente" |
WP | wp | Percorso di WP-CLI |
wp2shell-report-per-user.sh
| Variabile | Default | Descrizione |
|---|---|---|
DRY_RUN | 1 | 1 = solo anteprima, 0 = invio email |
SEND_ONLY_IF_ISSUES | 0 | 1 = email solo se viene trovato qualcosa |
SINCE_DATE | 2026-07-15 | Soglia "modificati di recente" |
MAIL_FROM | security@<hostname> | Mittente email |
CORE_CACHE | /root/wp2shell-cores | Cache dei core puliti |
ANTHROPIC_API_KEY | (vuoto) | Chiave API Claude per la valutazione AI |
Valutazione AI (opzionale)
Per i diff ambigui che i pattern non riescono a classificare, lo scanner invia il diff alla Claude API (claude-sonnet-4-6) e restituisce un verdetto: DANGER, SUSPICIOUS, REVIEW o OK con una spiegazione di una frase. L'AI viene utilizzata solo nella zona grigia.
Nessuna chiave API? Usare l'analizzatore nel browser
Incollare l'output della scansione nell'artifact wp2shell Report Analyzer su Claude.ai — esegue la stessa valutazione AI direttamente nel browser.
Note
- Lo scanner non modifica nulla. Esecuzione sicura su server di produzione live.
- L'aggiornamento di WordPress alla versione patchata chiude la vulnerabilità ma non pulisce un sito già compromesso. Se vengono trovati indicatori, ripristinare da un backup pulito.
- La cartella
CORE_CACHE(/root/wp2shell-cores/) viene riutilizzata tra le scansioni. Eliminarla per forzare un nuovo download. - Il database
known_shells.sha256viene aggiornato automaticamente una volta ogni 24 ore.
Licenza
GPL-3.0 — consultare LICENSE
Crediti
Sviluppato da BytesPulse in risposta alla divulgazione di wp2shell (luglio 2026).
Informazioni CVE: https://wp2shell.com