
CVE-2026-87902에 대한 개념 증명 및 공개 패키지로, locate_template()를 통한 WordPress Core의 인증되지 않은 로컬 파일 포함 취약점이며, 루프백 랩과 패치 지침을 포함합니다.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
WordPress Core는 7.1.1 이하의 여러 버전에서 locate_template() 함수를 통한 로컬 파일 포함(Local File Inclusion) 취약점에 노출되어 있습니다.
| CVE | CVE-2026-87902 · CVE.org |
| CWE | CWE-98 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 제품 | WordPress Core |
| 영향받는 버전 | 7.1.1까지 모든 버전 (포함) |
| 패치 버전 | 7.1.2 이상 |
| 인증 | 인증 불필요 (소스 맵 참조) |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 · 벤더/클라이언트 공개 패키지, 스캐너 아님 |
wp-includes/template.php get_page_template + locate_template on 7.1.1. Patch 7.1.2 _wp_is_template_path_allowed and validate_file on decoded pagename.
GET/?page_id={id}&pagename=templates%252F%252e%252e%252F%252e%252e%252F%252e%252e%252Fuploads%252Fghsa7hp8-witnessGET /?page_id=<published page>&pagename=<double-encoded templates/../../../uploads/ghsa7hp8-witness>WP_Query parse_query is_page from page_id; get_posts replaces WHERE with ID=page_idget_page_template urldecode pagename then page-{$pagename}.phplocate_template file_exists(stylesheet_path + '/' + template_name) no jailtemplate-loader realpath + include인증 불필요한 200 응답 본문에 GHSA7HP8-WITNESS와 wp_version=7.1.1이 포함됩니다. 대조군 GET /?page_id=N에는 포함되지 않습니다.
먼저 할 일: WordPress Core를 7.1.2 이상으로 업데이트하십시오.
업그레이드 후 검증
CVE-2026-87902-Abraxas-Labs.py를 다시 실행하십시오: 매핑된 증거가 나타나지 않아야 합니다.즉시 업데이트할 수 없는 경우
오직 http://127.0.0.1:8088 (또는 바인딩한 루프백)만 대상으로 하십시오. 이 스크립트를 인터넷을 향해 실행하지 마십시오.
python3 CVE-2026-87902-Abraxas-Labs.py
성공은 응답 본문에 위의 증거가 나타나는 것입니다. 일반적인 200 HTML은 아닙니다.
재현에 사용된 루프백 스택. 이 폴더의 Dockerfile이 소스에서 빌드하지 않는 한 공식 이미지를 사용합니다.
cd lab
docker compose up --force-recreate
YAML이 로컬 디렉터리를 마운트하는 경우(버전 표의 플러그인 zip / 소스 태그) 취약한 제품 트리를 Compose 옆에 바인딩하십시오. 127.0.0.1 외에는 아무것도 게시하지 마십시오.
# CVE-2026-87902 / GHSA-7hp8-65ch-5whp
CWE: CWE-98
CVSS: High 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H (Wordfence). GitHub advisory: Critical.
## Description
An unauthenticated attacker can make `get_page_template()` page-template resolution include a chosen readable local `.php` file outside the active theme directories. `locate_template()` in WordPress <= 7.1.1 concatenates the caller-supplied template name onto the theme path and does not verify the result stays inside the theme. The core-reachable vector is the url-decoded `pagename` query variable. WordPress 7.1.2 adds `_wp_is_template_path_allowed()`.
## Product
WordPress 7.1.1 (fixed in 7.1.2, backported through 4.7.37). Lab oracle is LFI of a witness PHP file, not RCE.
이 공개 패키지는 GNU Affero General Public License v3.0에 따라 라이선스됩니다. LICENSE를 참조하십시오.
이 패키지는 벤더, 사이트 소유자, 라이선스된 랩을 위한 것입니다. 스크립트는 127.0.0.1과 통신합니다. 소유하지 않은 시스템에 사용하는 것은 Abraxas Labs에 의해 승인되지 않습니다. 보증하지 않습니다.