首页 网络安全 正文
  • 本文约3635字,阅读需18分钟
  • 82
  • 0

Adblock Plus授权绕过漏洞CVE-2026-7686

摘要

栋科技漏洞库关注到位于 Adblock Plus v4.36.1 版本的源校验缺失漏洞,该漏洞现已经被追踪为CVE-2026-7686,CVSS 4.0评分6.9。

Adblock Plus 是一款开源广告拦截浏览器扩展广告,作为拦截领域的标杆级工具,该扩展插件免费、开源、跨平台,功能全面且易用。

一、基本情况

Adblock Plus 适合追求纯净浏览、隐私保护与高效上网的用户,这款插件默认设置兼顾用户与网站利益,可以自定义适配个性化需求。

Adblock Plus授权绕过漏洞CVE-2026-7686

Adblock Plus 由德国 Eyeo GmbH 于2006年开发,全球用户超 5000 万,主打去广告、防跟踪、提网速,适配全平台浏览器与移动端。

栋科技漏洞库关注到位于 Adblock Plus v4.36.1 版本的源校验缺失漏洞,该漏洞现已经被追踪为CVE-2026-7686,CVSS 4.0评分6.9。

二、漏洞分析

CVE-2026-7686 是位于 Adblock Plus 受影响版本中的授权绕过漏洞,导致任何网站可通过伪造postMessage消息激活Premium授权。

受影响版本premium.preload.js的activation_onMessage函数未验证event.origin属性,仅检查消息结构便处理payment_success命令。

同时 background.js 的 premium.activate 处理器未将 userId 与支付会话绑定即进行持久化,

运行于 accounts.adblockplus.org 域内的任意 JavaScript 代码,

均可伪造 payment_success 跨文档通信事件,在无需实际付款的前提下激活高级会员订阅。

插件后台未对提交的用户 ID 与合法支付会话进行绑定校验,攻击者仅需一行 JS 代码,约 30 秒即可完整绕过整套高级权限鉴权流程。

(一)该漏洞由三层独立的鉴权失效共同导致:

第一层 — 前端(premium.preload.js:368):缺失来源校验

内容脚本注册了一个 window.message 监听器,仅校验消息数据格式,却完全忽略了关键安全校验项:

event.origin(消息来源域名)

event.source(消息发送窗口)

会话绑定

随机数 / 令牌校验

// premium.preload.js:368 — actual source code
function activation_onMessage(event) {
    const { data } = event;
    if (data.version !== 1 ||
        data.command !== "payment_success" ||
        !data.userId) {
        console.error("Received invalid message");
        return;
    }
    window.removeEventListener("message", activation_onMessage);
    void activateLicense(data.userId, event.origin);
    // ❌ event.origin is passed along but never validated
}
async function activateLicense(userId, origin) {
    try {
        const isSuccess = await activate(userId);
        if (!isSuccess) {
            throw new Error("Error in background page");
        }
        const payload = { ack: true };
        window.postMessage(payload, origin);
    } catch (ex) {
        console.error("Failed to activate Premium license", ex);
    }
}

第二层 —— 插件后台(background.js:6788):用户 ID 未与支付会话绑定

后台脚本在接收 premium.activate 指令后,仅校验 userId 非空,便直接将该用户 ID 持久化写入本地配置,并触发许可证校验流程;

全程未验证该用户 ID 是否源自合法的支付流程。

 

随后,位于 background.js:6671 的 checkLicense() 函数会直接使用这个未经校验的持久化用户 ID执行许可证校验。

// background.js:6671 — actual source code
const userId = prefs.Prefs.get("premium_user_id");
if (!userId) { return; }
const requestData = {
    cmd: "license_check",
    u: userId,   // any userId from any source reaches this point
    v: "1"
};
const requestUrl = prefs.Prefs.get("premium_license_check_url");
const response = await fetch(requestUrl, {
    method: "POST",
    cache: "no-cache",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(requestData)
});
const newLicense = (await response.json());
if (newLicense.status !== "active") {
    throw new InvalidLicenseError(...)
}
activateLicense(oldLicense, newLicense);

双重失效叠加

该漏洞的核心在于两层独立的校验机制同时失效:

前端内容脚本(premium.preload.js)不校验消息来源,导致攻击者可伪造支付成功事件。

后台脚本(background.js)不校验用户 ID 是否与真实支付会话关联,导致伪造的 ID 可直接被系统接受。

这意味着,整个授权流程没有任何一道有效的 “关卡” 能阻止攻击者,最终形成了一个几乎无成本、易利用的权限绕过漏洞。

(二)攻击向量

1、前置条件

浏览器中已安装 Adblock Plus 扩展(普通用户默认配置即可满足)

可访问 https://accounts.adblockplus.org(公开可访问,无需登录)

具备在浏览器控制台执行 JavaScript 的能力(现代浏览器的标准功能)

2、攻击流程

访问 accounts.adblockplus.org 页面,或在任意可执行 JS 的环境中打开该域名页面

利用浏览器控制台执行恶意 JavaScript,伪造 payment_success 跨文档通信事件,绕过前端来源校验

伪造的事件将被扩展的内容脚本接收并传递给后台脚本

后台脚本未校验用户 ID 与支付会话的绑定关系,直接将伪造的用户 ID 持久化存储

扩展将该用户 ID 视为已付费的合法用户,完成 Premium 订阅授权激活

攻击者无需任何支付行为,即可永久解锁高级功能

(三)流程解读

1、正常(合法)流程

用户完成支付

支付系统触发 postMessage 事件

扩展校验消息(仅校验内容,不校验来源)

后台脚本持久化 userId,并调用 license_check

服务器确认支付有效 → Premium 高级订阅激活

2、攻击流程

攻击者访问 https://accounts.adblockplus.org(无需登录)

premium.preload.js 内容脚本被注入页面

攻击者打开浏览器开发者工具控制台

执行一行 JavaScript 代码(POC 见下文)

扩展接收伪造消息,不校验消息来源

后台脚本持久化任意 userId,并调用 license_check

服务器未拒绝伪造的 userId → Premium 高级订阅被成功激活

3、核心差异与漏洞点

正常流程依赖支付系统触发事件,但扩展仅校验消息格式,不校验发送者身份;

攻击流程直接在页面内伪造 postMessage,绕过支付环节;

服务器未校验 userId 与真实支付的绑定关系,导致伪造的 ID 也能通过校验。

三、POC概念验证

Adblock Plus授权绕过漏洞CVE-2026-7686

Adblock Plus授权绕过漏洞CVE-2026-7686

1、POC代码

管理员已设置登录后刷新可查看

2、复现步骤

从 Chrome 网上应用店安装 Adblock Plus 扩展(扩展 ID:cfhdojbkjhnklbpkdaibdccddilifddb)

访问页面:https://accounts.adblockplus.org

打开开发者工具 → 控制台面板(快捷键 F12)

粘贴上方的漏洞验证代码(PoC)并按下回车

打开 Adblock Plus 设置页面:

chrome-extension://cfhdojbkjhnklbpkdaibdccddilifddb/options.html

验证结果:高级版(Premium)已成功激活,页面显示 “欢迎使用 Adblock Plus 高级版”,所有付费功能全部解锁

四、影响范围

Adblock Plus ≤ 4.36.1

五、修复建议

Adblock Plus > 4.36.1

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接