浏览器扩展已经成为现代网络生活中不可或缺的工具。广告拦截、密码管理、翻译辅助、开发者工具——这些小小的插件极大地提升了我们的工作效率。但你是否想过,当你安装一个浏览器扩展时,你实际上给了它什么权力?
根据 Chrome Web Store 的数据,截至 2024 年,商店中托管了超过 14 万个扩展程序。StatCounter 的统计显示,Chrome 浏览器占据全球浏览器市场约 65% 的份额,这意味着数以亿计的用户每天都在使用浏览器扩展。而这些扩展拥有的权限,远比大多数人想象的要大得多。
当扩展拥有超越网页的特权
浏览器扩展的权限体系与普通网页完全不同。网页受同源策略、Content Security Policy 等多重安全机制的限制,而扩展则可以突破这些边界。
根据 Chrome 扩展权限架构的官方文档,扩展权限分为两大类:Host 权限和 API 权限。Host 权限允许扩展访问特定网站的内容,而 API 权限则让扩展能够调用浏览器提供的各种功能接口。
权限声明在扩展的 manifest.json 文件中:
{
"manifest_version": 3,
"name": "My Extension",
"permissions": [
"tabs",
"storage",
"bookmarks"
],
"host_permissions": [
"https://*/*",
"http://*/*"
]
}
当用户看到一个扩展请求"读取和更改您访问的网站上的所有数据"时,这听起来确实令人担忧。但从技术角度看,这个警告是必要的——因为一旦扩展的 Content Script 被注入到网页中,它确实可以读写页面上的任何内容。
三层组件架构与权限隔离
Chrome 扩展并非一个单一的实体,而是由多个组件构成的系统,每个组件拥有不同的权限级别:
Content Scripts(内容脚本) 是唯一能与网页 DOM 直接交互的组件。它们运行在网页的上下文中,可以读取和修改页面内容、监听用户输入。但 Content Scripts 不能直接调用 Chrome API,受限于网页的 CSP(Content Security Policy)和 CORS 策略。
Background Service Workers(后台服务工作者) 运行在独立的进程中,可以访问扩展声明的所有 Chrome API——storage、tabs、bookmarks、cookies 等。但它们无法直接操作任何网页的 DOM。
Popup Pages(弹出页面) 提供扩展的用户界面,当用户点击工具栏图标时显示。它们拥有 API 访问权限,但同样无法直接操作 DOM。
这三个组件之间通过消息传递机制进行通信。这种架构设计的初衷是建立一道安全边界:即使 Content Script 被恶意网页攻击,攻击者也需要额外的步骤才能触及高权限的 Background Worker。
DOM 访问:安全边界的缺失
2024 年发表在 ACM Web Conference 上的一项研究揭示了一个令人不安的事实:浏览器扩展与网页内容之间缺乏真正的安全边界。
研究团队来自威斯康星大学麦迪逊分校和加州大学圣地亚哥分校。他们构建了一个概念验证扩展,能够窃取用户密码并成功通过 Chrome Web Store 的审核流程。
为什么密码字段如此脆弱?
HTML 的 <input type="password"> 元素虽然会在视觉上隐藏输入内容(显示为圆点或星号),但从 JavaScript 的角度看,密码字段的值完全可以被读取:
// 任何注入到页面的脚本都可以执行这行代码
const password = document.querySelector('input[type="password"]').value;
这并非一个 bug,而是设计如此——密码管理器扩展需要读取密码字段来实现自动填充功能。但这种设计也意味着,任何具有 Host 权限的扩展都可以在用户输入密码时将其窃取。
研究团队对 Top 10,000 网站的登录页面进行了大规模测量,发现:
- 所有存在密码字段的网站(7,140 个),密码值都可以通过 JavaScript API 访问
- 超过 1,100 个网站存在"明文可见"漏洞——密码值直接存储在 HTML 源代码的
value属性中 - 这些网站包括 Google.com、Cloudflare.com 等知名平台
“明文可见"漏洞更为严重。在这些网站上,密码不仅在输入时可见,甚至在页面源代码中就明文存在:
<!-- 某些网站的实际 HTML -->
<input type="password" name="password" value="user_password_here">
这意味着攻击者甚至不需要等待用户输入,直接读取 DOM 就能获取密码。
扩展测量的惊人发现
研究团队进一步分析了 Chrome Web Store 上的 160,000 个扩展:
- 28,000 个扩展(约 17.5%)拥有访问敏感字段所需的权限
- 190 个扩展被确认会主动访问并存储密码字段
- 其中一个扩展会将用户名和密码明文发送到外部服务器
这个扩展的功能是"跟踪和分析用户的日常活动”,它在隐私政策中确实披露了收集认证信息的做法。但有多少用户会仔细阅读扩展的隐私政策?
2025 年的新攻击:DOM-based Extension Clickjacking
2025 年 8 月,安全研究员 Marek Toth 在 DEF CON 33 上披露了一种全新的攻击技术——DOM-based Extension Clickjacking。这项研究表明,点击劫持攻击并没有消失,而是转移到了浏览器扩展领域。
攻击原理
传统的点击劫持攻击依赖于 <iframe> 标签的透明化,将目标网站嵌入到恶意页面中。但这种攻击受到 X-Frame-Options 和 Content-Security-Policy 等安全头的限制。
DOM-based Extension Clickjacking 采用了一种不同的思路:不操作 iframe,而是直接操纵扩展注入到 DOM 中的 UI 元素。
许多扩展会在网页上注入用户界面元素——密码管理器的自动填充下拉菜单、翻译扩展的悬浮窗、广告拦截器的统计面板等。这些元素都是 DOM 的一部分,可以被页面上的 JavaScript 访问和修改。
攻击者可以将这些 UI 元素设置为不可见:
// 方式一:直接修改扩展元素的透明度
document.querySelector("extension-root-element").style.opacity = 0;
// 方式二:将整个 body 设为透明,用截图作为背景
document.body.style.opacity = 0.001;
document.documentElement.style.backgroundImage = "url('fake_screenshot.png')";
然后,攻击者创建一个虚假的"Cookie 同意横幅"或"Cloudflare 验证页面",诱导用户点击。当用户点击"接受 Cookies"时,实际上点击的是被隐藏的扩展 UI 元素——比如密码管理器的自动填充按钮。
影响范围
这项研究测试了 11 个主流密码管理器扩展:
- 全部 11 个都受 DOM-based Extension Clickjacking 攻击影响
- 涉及约 4000 万活跃用户
- 单击即可窃取信用卡信息(9 个中有 6 个易受攻击)
- 单击即可窃取个人信息(10 个中有 8 个易受攻击)
- 单击即可窃取存储的凭证(11 个中有 10 个),包括 TOTP 验证码(11 个中有 9 个)
受影响的扩展包括 1Password、Bitwarden、LastPass、KeePassXC-Browser、iCloud Passwords 等主流产品。
为什么浏览器允许这种操作?
这涉及到浏览器扩展安全模型的一个根本性设计哲学:Chrome 的安全模型假设扩展本身不是恶意的,但可能存在安全漏洞。
Google 在一篇关于扩展安全的论文中明确阐述了这一理念:如果扩展本身就是恶意的,浏览器几乎无法阻止其滥用权限。因此,Chrome 的防护措施主要针对"被恶意网站利用的良性扩展",而非"恶意扩展本身"。
这也是为什么扩展可以修改 DOM——因为许多合法功能(如密码管理器的自动填充、翻译扩展的文本替换)都需要这种能力。
供应链攻击:当可信扩展变节
如果说恶意扩展是"明枪",那么供应链攻击就是"暗箭"——攻击者不需要从头开发恶意扩展,而是攻陷已有的流行扩展。
Cyberhaven 事件:一封钓鱼邮件引发的灾难
2024 年 12 月 24 日,数据防泄漏公司 Cyberhaven 的 Chrome 扩展被攻陷。攻击者通过一封精心设计的钓鱼邮件,诱骗扩展的开发者授予恶意应用 OAuth 权限。
钓鱼邮件声称来自 Chrome Web Store,警告扩展存在政策违规,面临下架风险。邮件中的链接指向一个伪造的登录页面。当开发者使用 Google 账号登录时,攻击者获得了发布扩展的权限。
攻击者随后上传了恶意版本的 Cyberhaven 扩展(版本号 24.10.4)。这个版本新增了两个文件:
worker.js:连接到攻击者的 C2(命令与控制)服务器,下载配置文件content.js:在所有网页中注入脚本,收集 Facebook 相关域名的用户数据
恶意扩展在用户不知情的情况下运行了约 24 小时,影响了约 40 万用户。
不只是 Cyberhaven
这次攻击并非孤例。安全分析显示,同一攻击者还攻陷了至少 19 个其他扩展,包括:
- Internxt VPN
- VPNCity
- Parrot Talks
- Bookmark Favicon Changer
- GraphQL Network Inspector
- 多个 AI 助手扩展
这些扩展的共同特点是:拥有广泛的 Host 权限,可以访问用户浏览的所有网站。
更令人担忧的是,攻击者采用了模块化设计。配置文件从 C2 服务器动态下载,攻击者可以随时修改目标网站列表。在 Cyberhaven 的案例中,配置文件只包含 Facebook 域名,但攻击者完全可以在后续版本中扩展到银行、邮箱等敏感站点。
Manifest V3 能防止什么?
Chrome 在 2020 年推出了 Manifest V3,引入了一系列安全改进:
禁止远程代码执行:扩展不能动态加载外部 JavaScript 代码。这直接阻止了 eval()、new Function() 等危险操作。
declarativeNetRequest API:取代了原有的 webRequest API,扩展无法再实时修改网络请求。这减少了扩展被滥用于流量劫持的风险。
更严格的 CSP:扩展自身必须遵守严格的 Content Security Policy。
但这些改进并非万能药。Cyberhaven 攻击证明,即使是在 Manifest V3 时代,攻击者仍然可以通过攻陷开发者账户、篡改发布版本等方式植入恶意代码。而且,Manifest V3 并没有改变扩展对 DOM 的访问权限——Content Scripts 仍然可以读取页面上的任何内容。
扩展指纹追踪:隐私的新威胁
浏览器指纹是一种通过收集设备和浏览器特征来识别用户的技术。与传统 Cookie 不同,指纹不依赖于本地存储,难以被用户清除。
2025 年 2 月发表在 arXiv 上的一篇论文系统分析了扩展如何被用于指纹追踪。
指纹数据的来源
浏览器指纹由多个维度的信息组成:
浏览器信息:User-Agent、浏览器版本、插件列表、支持的 MIME 类型
设备信息:屏幕分辨率、色深、CPU 核心数、设备内存、触摸屏支持
硬件指纹:Canvas 渲染差异、WebGL 参数、AudioContext 输出
网络信息:时区、语言设置、HTTP 头部
单独看每项信息都不足以唯一标识用户,但组合起来却能形成高度独特的"指纹"。研究表明,现代浏览器的指纹熵值可达 20-30 比特,意味着每百万用户中可能只有一人具有完全相同的指纹组合。
扩展如何参与指纹生成
一些扩展本身就会修改浏览器的行为,这些修改反过来成为了指纹的一部分:
Canvas 指纹混淆扩展:通过在 Canvas 绘制过程中添加随机噪声来防止指纹追踪。但这种噪声模式本身可能成为新的标识符。
User-Agent 切换扩展:定期更换 User-Agent 字符串。但如果扩展只修改了 User-Agent 而没有同步修改其他相关属性(如 navigator.platform),这种不一致反而会使用户更加独特。
隐私保护扩展:如 Privacy Badger、uBlock Origin 等会阻止某些追踪脚本。但它们注入到页面的防护代码,也可能被检测到并作为指纹的一部分。
指纹追踪的检测与防御
前述论文提出的防护方案包括三个核心模块:
API 重写:使用 Object.defineProperty 修改浏览器 API 的返回值:
Object.defineProperty(navigator, 'userAgent', {
get: function() {
return spoofedUserAgent;
}
});
请求头拦截:使用 chrome.declarativeNetRequest API 修改 HTTP 请求头,移除或混淆 User-Agent、Accept-Language 等指纹信息。
追踪监控:记录网站访问指纹相关 API 的行为,让用户了解哪些网站在进行指纹追踪。
但这种防御也存在局限。过于激进的指纹混淆可能导致用户体验问题(如网站功能异常),而且无法从根本上解决扩展本身可能泄露信息的问题。
企业环境中的扩展治理
对于企业 IT 管理者来说,浏览器扩展管理是一个日益严峻的挑战。
根据 2025 年浏览器安全状况报告,53% 的企业用户在工作设备上安装了浏览器扩展。这些扩展大多未经 IT 部门审批,构成了严重的影子 IT 风险。
企业面临的六大攻击向量
权限过度申请:扩展请求比实际需求更多的权限。OWASP 的指南明确指出,这是最常见的扩展安全问题。一个翻译扩展可能请求访问所有网站的权限,尽管它只需要在用户选择的文本上工作。
DOM 访问与数据窃取:如前所述,具有 Content Script 注入能力的扩展可以读取任何页面内容,包括密码、信用卡号、敏感表单数据。
Cookie 劫持与会话盗用:具有 cookies 权限的扩展可以读取用户的所有 Cookie,包括会话令牌。攻击者可以利用这一点实现账户接管。
扩展指纹追踪:某些扩展可能收集用户的浏览习惯、设备信息等敏感数据,用于广告定位或用户画像。
供应链攻击:即使是可信的扩展也可能被攻陷。企业需要监控已安装扩展的更新,及时发现异常行为。
开发者安全意识缺失:许多扩展由独立开发者或小团队维护,缺乏专业的安全审计流程。这增加了漏洞被引入的风险。
管理策略
企业可以采取以下措施降低扩展带来的风险:
白名单制度:只允许经过审批的扩展安装。这可以通过 Microsoft Intune、Google Admin Console 等企业管理工具实现:
- 在 Intune 管理中心创建配置策略
- 添加"扩展安装阻止列表"设置
- 配置通配符阻止列表(
*)或指定允许的扩展 ID
权限审计:定期审查已安装扩展的权限声明,识别过度权限请求。Chrome 的扩展管理页面会显示每个扩展的权限详情。
更新监控:关注扩展的更新日志和版本变化。突然的权限变更或频繁的更新可能是安全事件的信号。
网络流量分析:监控扩展的网络请求,检测异常的外部通信。企业可以通过代理服务器或网络防火墙实现这一点。
用户层面的自我保护
对于普通用户,完全避免使用浏览器扩展并不现实。但我们可以采取一些措施来降低风险:
权限最小化原则
安装扩展前,仔细审查其请求的权限:
- 是否需要访问"所有网站"?如果扩展只在特定网站上工作,这个权限请求就值得怀疑
- 是否需要
storage、bookmarks、history等敏感权限?它们与扩展的核心功能是否相关? - 是否需要
tabs权限?这允许扩展查看所有打开的标签页
在 Chrome 中,你可以在扩展详情页查看权限列表。Firefox 的扩展商店还会在安装时突出显示关键权限。
限制扩展的网站访问
Chrome 提供了"点击时访问"选项,限制扩展只在用户主动点击图标时才在当前网站上运行:
- 右键点击扩展图标
- 选择"此网站上的权限"
- 选择"点击时访问"
这大大减少了扩展被动收集数据的机会。
定期清理
定期检查已安装的扩展,删除不再使用或不可信的扩展。许多用户安装了大量扩展后忘记清理,这些被遗忘的扩展可能在后台持续运行。
敏感操作时禁用扩展
在进行网上银行、登录敏感账户等操作时,可以考虑临时禁用所有非必要的扩展。虽然这增加了操作步骤,但能有效降低数据泄露风险。
浏览器厂商的应对
面对日益严峻的扩展安全形势,浏览器厂商也在不断改进其安全机制。
Chrome 的审查流程
Google 对提交到 Chrome Web Store 的扩展进行自动和人工审查:
静态代码分析:检测已知的恶意代码模式、危险的 API 调用
动态行为分析:在沙箱环境中运行扩展,监控其行为
人工审核:对于高风险扩展,会有人工审核员进行代码审查
但这些审查并非万无一失。前述研究团队的概念验证扩展就成功通过了审查流程。审查机制主要针对已知的恶意模式,对于新颖的攻击技术或精心伪装的恶意代码,可能无法及时发现。
Firefox 的可选权限
Mozilla 在 Firefox 中引入了"可选权限"机制。扩展可以声明某些权限为可选,只有在用户触发特定功能时才请求授权。这减少了扩展安装时请求的权限数量,让用户有更多控制权。
Safari 的扩展限制
Apple 对 Safari 扩展采取了更严格的限制:
- 扩展必须经过 App Store 审核
- 每个扩展需要独立的开发者账号(需支付年费)
- 更严格的权限请求和沙箱隔离
这种模式虽然限制了扩展生态的规模,但也提高了恶意扩展的成本。
未来的方向
浏览器扩展安全是一个持续演进的领域,没有一劳永逸的解决方案。
浏览器层面的改进
细粒度权限控制:当前的权限模型过于粗糙。未来可能会引入针对特定 DOM 元素(如密码字段、支付表单)的访问控制,让用户可以精确控制扩展能访问哪些内容。
扩展行为审计:浏览器可以记录扩展的敏感操作(如访问密码字段、发送网络请求),向用户提供透明度报告。
更强大的沙箱:进一步隔离扩展与网页内容,减少跨上下文攻击的风险。
开发者生态的改进
安全开发指南:推广安全编码实践,帮助扩展开发者避免常见漏洞。
自动化安全测试工具:开发专门针对扩展的安全测试框架,集成到开发流程中。
漏洞奖励计划:鼓励安全研究人员发现和报告扩展漏洞,建立良性循环。
用户教育
透明的权限说明:浏览器可以提供更直观、更易懂的权限解释,帮助用户理解安装扩展意味着什么。
风险提示:当扩展请求敏感权限时,提供明确的风险提示和替代建议。
浏览器扩展的安全困境,本质上是功能与安全的权衡。我们希望扩展能够提供强大的功能——自动填充密码、翻译网页、拦截广告——这些功能都需要一定的权限。但权限越大,被滥用的风险也越高。
Manifest V3 的改进、浏览器厂商的审查机制、企业的治理策略、用户的谨慎选择——这些都是安全链条上的环节。但正如 Cyberhaven 事件所揭示的,任何一个环节的失败都可能导致灾难性后果。
作为用户,我们无法完全避免使用浏览器扩展,但可以做到心中有数:每次点击"添加到 Chrome"时,我们实际上是在把一部分信任交给了一个第三方开发者。选择值得信任的扩展、授予最小必要的权限、定期审查和清理——这些简单的习惯,可能是我们在当前环境下最有效的自我保护手段。
参考资料
- Nayak A, Khandelwal R, Fernandes E, Fawaz K. Experimental Security Analysis of Sensitive Data Access by Browser Extensions. WWW ‘24: Proceedings of the ACM Web Conference 2024.
- Toth M. DOM-based Extension Clickjacking: Your Password Manager Data at Risk. DEF CON 33, 2025.
- OWASP Cheat Sheet Series. Browser Extension Vulnerabilities Cheat Sheet.
- Chrome Extensions Documentation. Declare permissions. Google, 2024.
- Chrome Extensions Documentation. Manifest V3 Overview. Google, 2024.
- Pulsedive. Compromised Browser Extensions: A Growing Threat Vector. 2025.
- Browser Fingerprint Detection and Anti-Tracking. arXiv:2502.14326, 2025.
- Keep Aware. The State of Browser Security Report 2025.
- Darktrace. Cyberhaven Supply Chain Attack: Exploiting Browser Extensions. 2025.