
CVE-2026-87902 탐지기. WordPress get_page_template LFI 클래스. 탐지 전용. 승인된 랩.
WordPress Core용 CVE-2026-87902 탐지기.
get_page_template()은 페이지 템플릿 해석이 활성 테마 외부의 읽기 가능한 로컬 .php 파일을 포함하도록 조작될 수 있습니다. WPSniper는 사이트를 핑거프린팅하고, 발행된 page_id를 선택하고, include 클래스를 프로브하며, 프로브 본문에만 고유한 강력한 PEAR 배너가 있을 때만 VULN을 출력합니다.
탐지만. 웹셸 없음. pearcmd config-create 없음. OS 명령 실행 없음.
python3 WPSniper.py -u https://lab.wordpress.local --shell
파이프라인:
subfinder -d lab.example -silent | httpx -silent | python3 WPSniper.py -t 8
서면 범위. 자체 랩. 그것이 실행에 대한 전체 라이선스입니다.
WordPress는 URL에서 파생되고 url-decoded된 pagename 쿼리 변수로부터 페이지 템플릿 이름을 구성합니다:
page-{$pagename}.php
그런 다음 locate_template()이 해당 파일을 포함합니다. 영향을 받는 빌드에서는 해석된 경로가 허용된 테마 디렉터리 내부에 머물도록 강제되지 않습니다. pagename의 이중 인코딩된 트래버설은 sanitize_title을 통과하여 get_page_template()이 한 번 디코딩하고 테마 트리 밖으로 벗어날 수 있을 만큼 충분히 살아남습니다.
닫힌 include 앞에는 두 가지 전제 조건이 있습니다:
page-로 시작하는 최상위 디렉터리가 있습니다 (WordPress는 page-templates/를 문서화합니다 — Twenty Twelve, Twenty Fourteen, Neve, Hestia, Sydney 등)..php 대상이 존재합니다. 탐지기는 include 오라클로 스톡 PEAR CLI 배너를 사용합니다. 탐지기는 그것을 작성하지 않습니다.RCE는 그러한 조건에 쓰기 가능/실행 가능한 가젯이 더해질 때 가능한 후속 결과입니다. 그 후속 결과는 이 저장소에 없습니다.
CVE 발견자 크레딧: Robert (ressl), WordPress HackerOne 경유. 권고: GHSA-7hp8-65ch-5whp.
버전 테이블은 내장되어 있습니다. 4.7.0–7.1.1이 영향을 받는 범위입니다. 패치된 지점: 7.1.2, 7.0.6, 6.9.9, 6.8.10 … 4.7.37까지 거슬러.
블로그 게시물에서 "pearcmd"라고 말하는 마케팅 페이지는 적중이 아닙니다.
다음이 모두 참일 때만 VULN:
?page_id= 다이제스트PEAR Version:, Usage: pear, PEAR_Config, Commands for pear, config-create, DEPRECATED: PEAR commands, pear.php)pearcmd / PEAR 단독은 폐기됨, 특히 이미 베이스라인 HTML에 있었던 경우INFO = 영향받는 버전 및/또는 page-templates 디렉터리, include가 닫히지 않음. INFO에 대해 critical을 제출하지 마십시오.
SAFE = 패치된 브랜치, 또는 include가 베이스라인과 동일함.
SKIP = WordPress가 아님, 잘못된 URL.
/etc/passwd는 이 CVE에 대한 잘못된 오라클입니다. locate_template()은 .php를 덧붙입니다. 대화형 passwd 명령은 여러분이 직접 그것을 확인할 수 있도록 존재합니다. root:x:0:0: 스탠자가 나타나는 것은 이례적이며 수동으로 검증해야 합니다.
python3 -m pip install -r requirements.txt
python3 WPSniper.py -u https://lab.wordpress.local
requests가 필요합니다.
--shell은 파이프라인에서 무시됩니다. 이는 의도적입니다.
python3 WPSniper.py -u https://lab.wordpress.local --shell
[email protected] ▶
1 fp version / theme / patched?
2 pages REST published pages
3 theme page-templates directory
4 probe PEAR include + baseline diff (no write)
5 diff same, print Δ + tokens
6 passwd try …/etc/passwd (this class includes *.php)
7 include P include a .php path without suffix
8 save last body → /tmp/wpsniper-probe.html
9 help
0 exit
모든 프로브는 전체 URL과 복사-붙여넣기 가능한 curl을 출력합니다. 보고서에 그것을 사용하십시오. 두 번째 요청을 만들어내지 마십시오.
7 include는 여러분이 이미 배치한 승인된 랩 파일을 위한 것입니다. 도움말 텍스트의 예시 이름은 증거 마커이며 드로퍼가 아닙니다.
WPSniper v1.3 CVE-2026-87902 get_page_template LFI
[radar] target https://lab.wordpress.local
[radar] generator=6.8.3 theme=twentytwelve status=affected
[radar] page_id=2
[radar] theme dir /wp-content/themes/twentytwelve/page-templates/ → 403
VULN lab.wordpress.local unique=['PEAR Version:','Usage: pear'] Δlen=+18420
patched 7.1.2 · 7.0.6 · 6.8.10 · backports to 4.7.37
이 페이지의 호스트는 랩 레이블입니다. 실제 고객 호스트 이름은 공개 스틸에 속하지 않습니다.
7.1.2 또는 여러분의 브랜치용 백포트로 업그레이드하십시오:
7.0.6 · 6.9.9 · 6.8.10 · 6.7.9 · 6.6.9 · 6.5.12 · 6.4.12 · 6.3.12 · 6.2.13 · 6.1.14 · 6.0.16 · 5.9.18 … 4.7.37까지.
7.1.2는 또한 해석된 템플릿 경로가 허용된 테마 디렉터리 내부에 머물 것을 요구합니다. 그것이 실제 수정이며, WAF 규칙이 아닙니다.
pearcmd config-create 없음, system() 래퍼 없음/etc/passwd를 주요 확인으로 사용하지 않음발견 사항이 필요하면: WPSniper가 이미 출력한 curl, 고유한 강력한 토큰, 그리고 베이스라인 다이제스트 불일치를 첨부하십시오.
승인된 보안 테스트 전용. 여러분이 소유하지 않았거나 서면으로 허가받지 않은 호스트에 대해 이것을 실행하는 것은 도구가 아닌 여러분의 책임입니다.
mitsec · Yunus Emre Öztaş
| 단계 | 작업 | 신호 |
|---|
| 1 | 홈 + generator + /feed/ | WordPress? 버전? 테마 슬러그? |
| 2 | REST /wp-json/wp/v2/pages 또는 HTML의 page_id= | 템플릿 경로가 실제로 실행되도록 발행된 페이지 |
| 3 | GET /wp-content/themes/{slug}/page-templates/ | 200 / 401 / 403 = 디렉터리 존재 |
| 4 | 베이스라인 ?page_id=N vs 프로브 pagename= | 본문 다이제스트 + 고유한 강력한 PEAR 토큰 |
| 플래그 | 의미 |
|---|
-u URL | 단일 대상 |
-l file | URL 목록 |
| stdin | subfinder | httpx | WPSniper |
-t N | 목록에 대한 스레드 (기본 6) |
-q | 조용한 행 + 요약 |
--shell | 단일 -u에 대한 대화형 프로브 |
--timeout | 초 (기본 14) |