Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-87902-PoC-pwnVader — CVE-2026-87902에 대한 셸 PoC로, page-template 해석을 통한 인증되지 않은 WordPress 코어 LFI가 pearcmd.php를 통해 RCE로 연계됩니다. | Kitploit
도구/GitHubGitHub/pwnvader/cve-2026-87902-poc-pwnvader
Vulnerability AnalysisExploitationWeb Application ExploitationSecurity VirtualizationWeb SecurityPenetration TestingRemote Access ToolPayload Development
GitHubpwnvader/cve-2026-87902-poc-pwnvader

CVE-2026-87902-PoC-pwnVader

CVE-2026-87902에 대한 셸 PoC로, page-template 해석을 통한 인증되지 않은 WordPress 코어 LFI가 pearcmd.php를 통해 RCE로 연계됩니다.

저장소 보기
24일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-87902 — WordPress 코어 페이지 템플릿 해석에서의 비인증 로컬 파일 포함 → RCE

작성자: pwnVader · 라이선스: MIT (저장소 루트)

구성 요소WordPress 코어 (wp-includes/template.php)
유형CWE-98 — PHP 파일 포함 (LFI → RCE)
영향 대상WordPress < 7.1.2 (7.0 브랜치는 7.0.6에서 수정됨; 6.x 백포트는 브랜치에 따라 다름)
수정 버전7.1.2 / 7.0.6
CVECVE-2026-87902 — CVSS 3.1 8.1 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
PoCpoc.sh

요약

get_page_template()는 pagename 쿼리 변수에 퍼센트 인코딩된 문자가 포함되어 있을 때 page-{urldecode(pagename)}.php를 페이지 템플릿 계층에 추가하며, locate_template()은 경로가 활성 테마 내부에 머무는지 검증하지 않고 file_exists() / require로 후보를 해석합니다. 따라서 비인증 공격자가 활성 테마 외부에 있는 읽기 가능한 로컬 .php 파일을 선택하여 포함하고 실행할 수 있습니다.

전제 조건:

  1. WordPress < 7.1.2.
  2. 활성 테마에 page-로 시작하는 최상위 디렉터리가 존재해야 함 (예: 공식 Twenty Fourteen은 page-templates/를 포함). 템플릿 이름은 항상 page-로 접두사가 붙으므로 첫 번째 경로 구성 요소가 존재해야 함.
  3. 메인 쿼리가 404가 아닌 페이지가 되도록 유효한 공개 페이지 ID. 스크립트는 코어 사이트맵, 홈페이지 body 클래스, 또는 소규모 ID 프로브에서 이를 탐색함.

페이로드는 이중 인코딩되어 sanitize_title_for_query()가 %2e/%2f 옥텟을 보존하도록 하며, get_page_template() 내부의 urldecode()가 템플릿 해석 시점에 ../를 재구성함.

서버에 접근 가능한 pearcmd.php와 register_argc_argv = On(공식 PHP 이미지의 기본값)이 있는 경우, 체인은 원격 코드 실행으로 확대됨: 쿼리 문자열이 + 구분자를 통해 CLI argv가 되고, pear config-create가 공격자가 제어하는 .php 파일을 작성하며, 동일한 LFI가 이를 포함함.

사용법

root@kitploit:~
# 대화형 메뉴 (빠른 시작에 권장)
./poc.sh

# 1) LFI 탐지 (읽기 전용)
./poc.sh check --target https://example.com

# 2) LFI 탐지 및 RCE 전제 조건 테스트 (자체 삭제 페이로드)
./poc.sh check-rce --target https://example.com --authorized

# 3) 체인을 통한 명령 실행 (자체 삭제 페이로드)
./poc.sh rce --target https://example.com --authorized --cmd "id;hostname"

옵션: --page-id N, --ups N, --pearcmd PATH, --timeout N. 대상이 localhost가 아닐 때 쓰기를 수행할 수 있는 모든 모드에는 --authorized(또는 VDP_AUTHORIZED=1)가 필요함.

예시 출력 (check)

root@kitploit:~
== CVE-2026-87902 PoC (check) ==
target: https://example.com

[1] Discovering a public page ID
  [info] page_id: 17
  [info] baseline: POST /?page_id=17 -> 52377 bytes

[2] Testing the LFI (read-only include of wp-includes/version.php)
  [PASS] VULNERABLE: included wp-includes/version.php from outside the theme (0-byte body vs 52377-byte page)
  [info] theme directory: page-templates/   traversal depth to webroot: 4
  [info] second file confirmed: wp-admin/install.php executed (static string returned)

== RESULT: VULNERABLE to CVE-2026-87902 (LFI confirmed) ==

예시 출력 (check-rce / rce)

root@kitploit:~
[3] Testing the LFI-to-RCE chain (self-deleting payload)
  [PASS] pearcmd.php executed via the LFI (usr/local/lib/php/pearcmd, root depth 7)
  [PASS] RCE CONFIRMED: command output returned (uid/gid present)
  [info] payload self-deleted (cleanup verified)

[4] Executing command: id;hostname;whoami
  > uid=33(www-data) gid=33(www-data) groups=33(www-data)
  > 4119cb19757f
  > www-data

LFI가 확인되었지만 PEAR가 없거나 register_argc_argv가 Off인 경우, 스크립트는 전제 조건을 명확히 보고하고 아무것도 쓰지 않고 종료함(exit 3).

탐지 로직

  1. 공개 페이지 ID 찾기 (사이트맵 → 홈페이지 body 클래스 → 숫자 프로브).
  2. 각 후보 page-* 테마 디렉터리와 순회 깊이에 대해, pagename 파라미터를 통해 page-<dir>/../../…/wp-includes/version.php를 요청 (POST, 빈 본문 — WordPress가 GET/HEAD를 먼저 정규 리디렉션하기 때문에 필요).
  3. 0바이트 본문의 200 응답(수 KB 페이지 기준선 대비)이 포함을 입증함.
  4. RCE 확인: 자체 삭제 페이로드로 LFI를 통해 pear config-create를 시도한 다음, 요청에 제공된 명령과 함께 작성된 파일을 포함함.

근본 원인 / 수정

7.1.2의 벤더 수정 (wp-includes/template.php):

root@kitploit:~
-        if ( $pagename_decoded !== $pagename ) {
+        if ( $pagename_decoded !== $pagename && 0 === validate_file( $pagename_decoded ) ) {

추가로 locate_template()의 realpath() 포함 검사 (_wp_is_template_path_allowed()). wordpress-7.0.6에는 바이트 단위로 동일한 수정이 포함되어 있음.

완화 조치

  • WordPress 코어를 7.1.2로 업데이트 (7.0 브랜치는 7.0.6).
  • 임시 조치: 모든 HTTP 메서드에서 순회 시퀀스(.., %2e%2e, %252e%252e)를 포함하는 pagename 값을 거부하거나, page-* 테마 디렉터리 전제 조건을 제거.

참고 자료

  • NVD — CVE-2026-87902: https://nvd.nist.gov/vuln/detail/CVE-2026-87902
  • 벤더 권고: https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
  • 수정 릴리스: https://wordpress.org/wordpress-7.1.2.tar.gz · https://wordpress.org/wordpress-7.0.6.tar.gz

면책 조항

승인된 보안 테스트 전용입니다. RCE 모드는 자체 삭제 페이로드를 사용하며 자체 임시 마커 파일 외에는 아무것도 쓰지 않지만, 여전히 대상에서 명령을 실행하므로 명시적 허가가 있는 곳에서만 실행하십시오.

도구 다운로드