
WordPress 페이지 템플릿 경로 순회로 인해 로컬 PHP 파일 포함 및 PEAR 기반 RCE로 이어지는 CVE-2026-87902를 재현하는 Docker 기반 로컬 랩으로, PoC 스크립트를 포함합니다.
CVE-2026-87902(WordPress 페이지 템플릿 파싱 경로 순회 → 로컬 PHP 파일 포함 → pearcmd 파일 쓰기 RCE)를 재현하는 로컬 Docker 랩입니다.
⚠️ 승인된 환경에서의 보안 학습 및 연구 전용입니다. 로컬 Docker에서만 실행해야 하며, 승인되지 않은 어떤 대상에도 사용해서는 안 됩니다. 취약점은 2026-09-22에 공식적으로 수정되었으며, 모든 지원 브랜치에 패치가 배포되었습니다.
get_page_template()이 사용자 제어 가능한 pagename 파라미터에 2차 urldecode()를 수행한 후 템플릿 후보 이름에 이어 붙이며, locate_template()은 file_exists()로 파일을 찾고 로드 전에 realpath/접미사/가독성 검사만 수행하여 경로가 여전히 테마 디렉터리 내에 있는지 검증하지 않음 (canonicalization은 있으나 containment는 없음)| # | 조건 | 이 랩에서의 충족 방식 |
|---|---|---|
| 1 | 게시되었고 사용자 정의 템플릿이 지정되지 않은 페이지 | setup.sh가 예제 페이지를 자동 생성 및 정리 |
| 2 | 활성 테마 최상위에 page-* 디렉터리 존재 | theme/mytheme/page-templates/ (활성 테마에 이 디렉터리 포함) |
| 3 | 읽을 수 있는 /usr/local/lib/php/pearcmd.php | 공식 php 이미지에 PEAR 내장 |
| 4 | register_argc_argv=On + 쓰기 가능한 저장 위치 | 공식 이미지에는 php.ini가 없어 컴파일 기본값 On; /tmp 쓰기 가능 |
docker compose up -d # 최초 실행 시 이미지 자동 다운로드 (약 1GB)
sh setup.sh # 설치 + /flag 심기 + 네 가지 조건 검증
python cve-2026-87902.py --url http://127.0.0.1:8091
예상 출력:
[*] page id : 4 (about, default template, via /index.php?rest_route=...)
[*] depth 7 : stage 1 HTTP 200, stage 2 HTTP 200
[+] marker : 'CVE-2026-87902-POC-OK' found 12 time(s) in the stage-2 response
[+] EXPLOIT SUCCESSFUL - PHP executed with the web-server account's privileges
(12회 = PEAR 설정 파일에 12개의 설정 항목이 있으며, 각 항목에 payload가 하나씩 삽입됨)
stage 1에서 PEAR가 작성한 파일 확인 (#PEAR_Config 0.9로 시작하는 serialize 텍스트이며, payload가 일반 문자로 12개 설정 항목에 삽입되어 있음):
docker compose exec wordpress cat /tmp/wp-pear-rce-flag.php
register_argc_argv=On으로 인해 query string이 +를 기준으로 $argv로 분할되어 pearcmd가 자신이 터미널에서 호출된 것으로 인식; config-create <root> <file>이 root(PHP 코드가 내장된)를 대상 파일에 그대로 기록<?=...?>가 실행되어 /flag를 읽어 출력CVE-2026-87902-POC-OK (컨테이너 /flag에 위치)setup.sh를 실행하십시오완전 정리 (컨테이너 + 데이터 볼륨 + 이미지):
docker compose down -v --rmi all
docker-compose.yml WordPress 7.0.2-php8.3-apache + MySQL 8.4 + wp-cli
theme/mytheme/ 실험 테마 (page-templates/ 디렉터리 포함, 조건②)
cve-2026-87902.py PoC (ressl/cve-2026-87902-poc에서 가져옴, 저작권은 원저자에게 있음)
setup.sh 원클릭 설치 + 네 가지 조건 자체 점검