
偽装されたX-Forwarded-Forヘッダーを使用してWordPressプラグインの投票制限を回避する概念実証エクスプロイトです。承認済みのWordPressインスタンス上でCVE-2026-14840を検証するためのDockerラボを同梱しています。
作者: nullwhisper
用途: 許可されたセキュリティ調査 / 脆弱性検証のみ。
YOP Poll プラグインのバージョン < 7.0.6 は、IP ごとに1票という制限を実施しています。問題は、クライアント IP を取得する際に REMOTE_ADDR よりも先に HTTP_CLIENT_IP と HTTP_X_FORWARDED_FOR をチェックすることです。これらのヘッダーは攻撃者が制御できるため、認証されていないユーザーがリクエストごとに新しい 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 は投票する回数です。複数回受け付けられた場合、ターゲットは脆弱です。
このスクリプトは、サイトが WordPress のプレーンなパーマリンクを使用しており、/wp-json/... が HTML を返す場合に、自動的に ?rest_route=/yop-poll/v1/votes にフォールバックします。
脆弱性のあるプラグインをダウンロードします(プラグインのバイナリを再配布しないでください):
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
http://127.0.0.1:8090 で WordPress インストーラーを完了します。
投票とテストページを作成します:
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、デフォルトのプレーンなパーマリンクでテストしました。
同一 IP で3回 — 制限が機能:
#1 201 -> Vote recorded successfully.
#2 403 -> You have already voted on this poll.
#3 403 -> You have already voted on this poll.
X-Forwarded-For でリクエストごとに異なる IP — バイパスが機能:
#1 201 -> Vote recorded successfully.
#2 201 -> Vote recorded successfully.
#3 201 -> Vote recorded successfully.
wp_yoppoll_votes テーブルは、偽装された IP ごとに1行増加し、IP ごとの制限がバイパスされることを確認します。
このリポジトリには PoC とラボのオーケストレーションファイルのみが含まれています。YOP Poll プラグインは GPL-2.0+ ですが、完全なコピーを配布することは不要であり、リポジトリを肥大化させ、問題を引き起こす可能性があります。自分のラボ用に WordPress.org からバージョン 7.0.5 をダウンロードしてください。
このツールは 許可されたセキュリティテストと調査のみ を目的としています。所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。作者は、このコードによって引き起こされた誤用や損害について責任を負いません。