
스푸핑된 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 기본 고정 링크(plain permalinks)를 사용하고
/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, 기본 고정 링크(plain permalinks) 환경에서 테스트했습니다.
동일 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마다 한 행씩 늘어나며, 이는 IP당
투표 제한이 우회되었음을 확인해 줍니다.
이 저장소에는 PoC와 실습 환경 구성 파일만 포함되어 있습니다. YOP Poll 플러그인은 GPL-2.0+이지만 전체 복사본을 배포하는 것은 불필요하고, 저장소를 비대하게 만들며 문제를 일으킬 수 있습니다. 자체 실습 환경을 위해 WordPress.org에서 7.0.5 버전을 다운로드하세요.
이 도구는 승인된 보안 테스트 및 연구 목적으로만 사용하세요. 소유하지 않았거나 테스트에 대한 명시적 허가를 받지 않은 시스템에는 사용하지 마세요. 작성자는 이 코드로 인한 오용이나 손해에 대해 책임을 지지 않습니다.