
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.
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.
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:
author__not_in di WP_Query/wp-json/batch/v1 dell'API RESTI siti compromessi mostrano un admin rogue con prefisso di login wp2_ ed email @wp2shell.invalid.
Maggiori informazioni: https://wp2shell.com
| 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 |
| 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 |
| 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 |
| 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 |
| Controllo | Gravità |
|---|---|
Voci crontab utente con curl/wget/php/base64 | HIGH |
| File cron di sistema che fanno riferimento al percorso del sito | MEDIUM |
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 |
wprootsendmail (per i report email)python3 (per la gestione JSON della valutazione AI)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: 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.
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).
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.
| 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 |
| 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 |