Vulnerabilità WordPress CVE-2026-87902, attivamente sfruttata

La vulnerabilità CVE-2026-87902, corretta in WordPress 7.1.2, permette ad un attaccante non autenticato di sfruttare una Path Traversal nel parametro pagename per forzare WordPress a caricare file PHP arbitrari presenti sul server.

Come funziona

Il problema nasce dal fatto che WordPress decodifica (urldecode) il parametro pagename e lo utilizza nella ricerca del template senza applicare adeguati controlli alla versione decodificata del percorso. Un attaccante può quindi inviare sequenze come: templates%252f%252e%252e%252f…
che dopo la doppia decodifica diventano: templates/../../../…
consentendo a WordPress di includere file PHP esterni alla directory del tema.

Versioni vulnerabili

Sono interessate tutte le versioni WordPress dalla 4.7.0 alla 7.1.1. La vulnerabilità è stata corretta nelle release di sicurezza 7.1.2, 7.0.6, 6.9.9, 6.8.10, 6.7.9 e relative backport.

Dalla Path Traversal alla RCE

La vulnerabilità di base è una Local PHP File Inclusion (LFI). L’RCE (Remote Code Execution) si ottiene solo se sono presenti ulteriori condizioni sul server.
Il PoC pubblico utilizza il tool PEAR incluso in molte installazioni PHP. Gli attaccanti in genere costruiscono poi delle webshell, come quella riportata in figura e rilevata su un server compromesso, che consentono di eseguire comandi e operazioni sul server stesso.

webshell
webshell

Tracce di attacco

Se i tuoi log contengono gli indicatori citati che corrisponde al metodo di exploit descritto allora è stato eseguito, e forse ha avuto successo, un tentativo di attacco che sfrutta questa vulnerabilità
Path Traversal, log: HTTP: POST /?page_id=5966&pagename=templates%252f%252e%252e%252f…  
Utilizzo di PEAR, log: HTTP: POST /?+config-create+

I passi successivi possono essere quelli di una creazione di una webshell come ad esempio:
HTTP /tmp/bunk-xxxxx.php
e successivamente:
HTTP GET /wp-content/uploads/bunk_hro31t.php  

La catena di escalation tramite PEAR può funzionare quando il file php.ini contiene: register_argc_argv = On

Mitigazioni consigliate

Aggiornare WordPress alla versione corretta.
Impostare register_argc_argv = Off.
Rimuovere PEAR dai sistemi esposti se non necessario.
Controllare la presenza di directory page-* nei temi.
Cercare file PHP sospetti in:
wp-content/uploads
webroot
/tmp
Analizzare i log alla ricerca di:
page_id, pagename, %25, “../”, “+config-create+”