Red Hot Cyber
Sicurezza Informatica, Notizie su Cybercrime, Analisi Vulnerabilità e Intelligenza Artificiale
il logo di wordpress al centro che gocciola sangue. Atmosfera tecnologica, cyber, bella immagine prospettiva, hacking. colore, luce

Da Zero a Shell! HackerHood dimostra lo sfruttamento dell’exploit di wp2shell

23 Luglio 2026 17:02

A metà luglio 2026 il panorama WordPress è stato scosso da una vulnerabilità critica soprannominata “wp2shell“: una Remote Code Execution (RCE) pre-autenticazione presente nel core del CMS, con potenziale impatto su oltre 500 milioni di siti web.

La falla, tracciata con due identificativi distinti (CVE-2026-60137 e CVE-2026-63030) nasce da un difetto nella gestione dell’endpoint REST /batch/v1, che consente a un attaccante non autenticato di manipolare la validazione delle sotto-richieste fino ad ottenere una SQL Injection e, da lì, l’esecuzione di codice arbitrario sul server.

L’obiettivo di questo articolo è puramente didattico. Vogliamo ricostruire, passo dopo passo, l’intero percorso che porta dalla scoperta della vulnerabilità alla compromissione completa di un’istanza WordPress in laboratorio, così da comprendere il meccanismo dell’attacco, la sua reale pericolosità e l’importanza di applicare tempestivamente le patch di sicurezza.

Advertising

Tutte le attività descritte sono state condotte in un laboratorio isolato e controllato, su un’installazione WordPress dedicata e priva di dati reali, appositamente predisposta per l’analisi della vulnerabilità.

La scoperta: cosa dice la comunità e cosa dicono le CVE

Il punto di partenza è l’articolo pubblicato da Red Hot Cyber, a firma di Luigi Zullo, che ha dato risalto alla scoperta: “Massimo allarme per WordPress: RCE critica nel core, 500 milioni di siti potenzialmente vulnerabili”. La sintesi editoriale inquadra bene la portata del problema.

Dall’articolo emergono le informazioni chiave necessarie per orientare l’analisi:

  • Nome della vulnerabilità: wp2shell (RCE pre-auth nel core di WordPress)
  • Identificativi: CVE-2026-60137 e CVE-2026-63030
  • Versioni patchate d’emergenza: 7.0.2, 6.9.5 e 6.8.6
  • Impatto: takeover completo del sito da parte di attaccanti non autenticati

Queste informazioni pubbliche costituiscono la base di partenza per verificare se la nostra installazione di laboratorio rientri tra le versioni vulnerabili.

Verifica della versione in laboratorio

Il primo passo operativo è controllare la versione di WordPress effettivamente installata sul target di test, tramite il pannello di amministrazione (wp-admin → Aggiornamenti).

Advertising
Fig. 2 – Il target di laboratorio riporta la versione 6.9.1, dichiarata “aggiornata” dal pannello ma comunque compresa nell’intervallo vulnerabile.

Il pannello di WordPress indica “You have the latest version of WordPress” con versione 6.9.1. Va precisato che il laboratorio è volutamente isolato dalla rete Internet, quindi questo messaggio riflette semplicemente l’assenza di connettività verso i server di WordPress.org e non un reale fallimento del meccanismo di auto-update.

Il dato resta comunque utile a fini didattici per un motivo diverso: dimostra che la sola dicitura “aggiornato” mostrata da un pannello, senza un riscontro attivo con i bollettini di sicurezza più recenti, non garantisce affatto l’assenza di vulnerabilità note, specialmente quando queste vengono scoperte dopo il rilascio della versione stessa.

Riscontro con la Proof of Concept pubblica

Per confermare che la versione 6.9.1 rientri effettivamente nel perimetro vulnerabile, è stato consultato il repository pubblico Icex0/wp2shell-poc su GitHub, che documenta in modo dettagliato la catena di exploit completa (“full RCE chain”).

Fig. 3 – La tabella delle versioni interessate pubblicata nella PoC: l’intervallo 6.9.0–6.9.4 (che comprende la 6.9.1 del laboratorio) risulta “Affected”.

La tabella riportata nella repository conferma quanto ipotizzato:

  • <= 6.8.5 → Not affected
  • 6.9.0 – 6.9.4 → Affected (la nostra versione 6.9.1 rientra qui)
  • 7.0.0 – 7.0.1 → Affected

La documentazione della PoC spiega anche la causa tecnica alla radice: l’endpoint REST /batch/v1 non è autenticato ed esegue più sotto-richieste in un’unica chiamata, basandosi sul fatto che ciascuna sotto-richiesta venga validata singolarmente.

Le funzioni serve_batch_request_v1() e la logica di validazione costruiscono due array paralleli (i match delle richieste e i risultati di validazione) che vengono poi indicizzati usando lo stesso offset al momento del dispatch.

Quando il path di una sotto-richiesta fallisce la normalizzazione tramite wp_parse_url(), viene comunque aggiunto all’array dei risultati di validazione ma non a quello dei match: questo disallineamento tra i due array è il cuore del bug, e permette a una richiesta malevola di “ereditare” l’esito di validazione di una richiesta legittima precedente ed eseguirla.

Ricognizione

Con la conferma teorica in mano, si è passati alla fase di ricognizione attiva sul target di laboratorio, utilizzando lo script Python fornito dalla PoC in modalità di check preliminare.

Fig. 4 – Output dello script wp2shell.py in modalità di ricognizione: identificazione della versione via generator RSS, rilevamento delle due CVE (SQLi facilitata e RCE via confusione di rotta REST), enumerazione del tema attivo.

L’output mostra con chiarezza il processo di fingerprinting: la versione 6.9.1 viene identificata passivamente tramite il generator esposto nei feed RSS (/?feed=rss2), dopodiché lo strumento segnala la presenza di due vulnerabilità concatenate:

  • WP < 7.0.2 – Facilitated SQLi (CVE-2026-60137), corretta nella 6.9.5
  • WordPress < 7.0.2 – REST API batch-route confusion and SQLi to RCE (CVE-2026-63030), corretta nella 6.9.5

Viene inoltre enumerato il tema attivo (Twenty Twenty-Five) con relativa versione e directory listing abilitato: informazioni di contorno utili in una ricognizione più ampia, ma non centrali per lo sfruttamento di wp2shell.

Sfruttamento: dalla SQLi alla shell interattiva

Prima di mostrare l’exploit in azione è opportuna una precisazione metodologica: lo script della PoC pubblica, nella sua versione originale, è stato scritto per l’esecuzione di comandi su server Linux (come mostra il commento “for linux server (original)” nel codice, con la costruzione della shell tramite shlex.quote e printf per delimitare l’output).

Il target di laboratorio, invece, gira su stack XAMPP in ambiente Windows: la sezione di esecuzione comandi è stata quindi adattata di conseguenza (“for windows server”), rimuovendo le costruzioni di shell tipiche di Linux non compatibili con cmd.exe.

Si tratta di una modifica minima, circoscritta al solo wrapper di esecuzione dei comandi lato client, che non altera in alcun modo la logica della vulnerabilità né la catena SQLi-to-RCE, ma è necessaria per adattare la PoC al sistema operativo del target di test.

Fig. 5 – Estratto del codice della PoC: la riga di commento “# for linux server (original)” e il ramo “for windows server” effettivamente utilizzato, adattato al target XAMPP/Windows del laboratorio.

È stata fatta un ulteriore modifica per stampare la password auto generata del utente che andra a creare.

In una prima esecuzione, con l’opzione –confirm-sqli, lo script conferma concretamente la vulnerabilità inviando una sonda sulla rotta batch e verificando la risposta HTTP e i marcatori attesi, fino a confermare la SQL Injection tramite una UNION su un fake-post di lettura.

Confermata la vulnerabilità, si è passati alla fase di exploitation vera e propria, lanciando lo script in modalità shell. È importante sottolineare che l’attacco parte senza credenziali: l’intero processo, dalla creazione dell’utente amministratore al caricamento della webshell, avviene sfruttando esclusivamente la catena SQLi-to-RCE pre-autenticazione.

Fig. 6 – Sequenza di exploitation: creazione automatica di un amministratore via SQLi, autenticazione, deploy della webshell come plugin e apertura di una shell interattiva sul sistema target.

La sequenza osservata nel terminale è la seguente:

  • Nessuna credenziale fornita: lo script tenta la creazione pre-auth di un amministratore sfruttando il “ponte” SQLi-to-customizer
  • Creazione dell’utente amministratore wp2_1d2f1c9bc43a con password generata casualmente
  • Autenticazione automatica con le credenziali appena create
  • Deploy di un plugin contenente una webshell (wp2shell_f4bd897b.php) nella directory wp-content/plugins
  • Apertura di una shell interattiva: i comandi whoami e dir confermano l’esecuzione di codice arbitrario sul server, con l’utente di sistema desktop-787pguq\admin

Questo passaggio rappresenta il cuore della dimostrazione: da una richiesta HTTP non autenticata si arriva, in pochi secondi e senza alcuna interazione manuale, all’esecuzione di comandi con i privilegi del processo web.

Verifica lato pannello: utente e plugin creati dall’exploit

Per completare il quadro, è utile osservare gli effetti dell’attacco anche dal punto di vista dell’amministratore legittimo, accedendo al pannello wp-admin con l’utenza compromessa.

Fig. 7 – La sezione Utenti mostra il nuovo account amministratore wp2_1d2f1c9bc43a, creato interamente dallo script di exploit senza alcuna azione manuale.

Nella sezione Utenti compare il nuovo account amministratore, con email fittizia (@wp2shell.invalid) generata automaticamente dal processo di exploitation. Il secondo account (wp2shell) è l’amministratore legittimo dell’installazione di test.

Fig. 8 – La sezione Plugin conferma la presenza del plugin “wp2shell”, descritto come “Temporary command runner”: la webshell mascherata da plugin legittimo.

Nella sezione Plugin è presente il plugin wp2shell, con la laconica descrizione “Temporary command runner”: si tratta della webshell caricata dall’exploit, camuffata come un plugin ordinario e attivabile/disattivabile come qualsiasi altra estensione.

Questo dettaglio è particolarmente istruttivo per chi si occupa di incident response: un plugin sconosciuto con un nome insolito e una descrizione generica è spesso il primo indicatore di compromissione da cercare durante un’analisi forense su un sito WordPress.

Conclusione

Il percorso ricostruito mostra in modo lineare come una vulnerabilità apparentemente circoscritta a un endpoint REST poco noto (/batch/v1) possa trasformarsi, attraverso una catena di errori di validazione, in una compromissione totale del sistema: dalla SQL Injection alla creazione di un amministratore, fino all’esecuzione di comandi arbitrari tramite webshell. L’intero processo, come dimostrato, non richiede credenziali né interazione da parte della vittima, il che spiega la gravità con cui la community di sicurezza ha accolto la scoperta di wp2shell.

Dal punto di vista difensivo, gli elementi chiave da portare a casa sono tre. Primo: la dicitura “aggiornato” mostrata dal pannello di WordPress non è una garanzia assoluta di assenza di vulnerabilità, è necessario monitorare attivamente i bollettini di sicurezza (come quello di Red Hot Cyber) e verificare la propria versione anche quando il sistema la dichiara aggiornata, specialmente in presenza di CVE critiche scoperte dopo il rilascio.

Secondo: endpoint REST che aggregano più operazioni in un’unica chiamata (batch endpoint) meritano un’attenzione particolare in fase di validazione, perché un disallineamento anche minimo tra strutture dati parallele può avere conseguenze catastrofiche.

Terzo: la presenza di plugin non riconosciuti, anche con nomi e descrizioni apparentemente innocue, deve sempre destare sospetto e innescare una verifica di integrità del sito.

Il video completo, che accompagnerà questo articolo, mostrerà l’intera sequenza in azione end-to-end, dalla ricognizione iniziale fino alla shell interattiva sul sistema compromesso, offrendo una dimostrazione pratica e riproducibile in ambiente di laboratorio a scopo esclusivamente didattico e di sensibilizzazione.

Riferimenti

Nota: attività condotta esclusivamente in ambiente di laboratorio isolato, a scopo didattico e di awareness. Nessuna delle informazioni qui riportate va utilizzata su sistemi privi di autorizzazione esplicita.


📢 Resta aggiornatoTi è piaciuto questo articolo? Rimani sempre informato seguendoci su 🔔 Google News.
Ne stiamo anche discutendo sui nostri social: 💼 LinkedIn, 📘 Facebook e 📸 Instagram.
Hai una notizia o un approfondimento da segnalarci? ✉️ Scrivici


Manuel Roccon 300x300
Ho iniziato la mia carriera occuparmi nella ricerca e nell’implementazioni di soluzioni in campo ICT e nello sviluppo di applicazioni. Al fine di aggiungere aspetti di sicurezza in questi campi, da alcuni anni ho aggiunto competenze inerenti al ramo offensive security (OSCP), occupandomi anche di analisi di sicurezza e pentest in molte organizzazioni.
Aree di competenza: Ethical Hacking, Bug Hunting, Penetration Testing, Red Teaming, Security Research, Cybersecurity Communication