文章介绍了浏览器扩展的安全性,包括其结构、运行环境、攻击面和缓解措施等。文章强调浏览器扩展的安全性依赖于其结构和权限管理,同时提供了关于如何确保扩展安全性的建议。使用CodeQL查询可以识别潜在的漏洞和安全风险。
浏览器扩展的安全性主要依赖于其结构和权限管理。扩展由HTML、CSS和JavaScript文件组成,通过manifest.json文件配置运行环境和权限。每个运行环境都有其特定的权限和安全风险。
扩展的攻击面主要来自用户加载的网站和其他已安装的扩展程序。特定的配置错误也会增加攻击面,例如external_connectable属性和web_accessible_resources属性。
浏览器开发者为减轻这些漏洞的风险采取了多种缓解措施,包括从v2到v3的更新、UUID随机化和使用CodeQL建模。
用户应选择信誉良好的作者开发的扩展程序,并仔细审查其所需的权限。同时,开发者和研究人员可以使用CodeQL查询来检测和预防扩展中的常见漏洞。
作者:@Kevin Stubbings
原文:https://github.blog/security/vulnerability-research/attacking-browser-extensions/
背景
浏览器扩展自 2000 年代初随着 Firefox 和 Chromium 的采用而成为主流,其受欢迎程度一直在增长。如今,即使是普通用户也至少安装了一个扩展,通常是广告拦截器。关于浏览器扩展安全性的研究大多分散在各个漏洞报告和恶意 Chrome 扩展的报道中。本文将介绍浏览器扩展的结构及其生态系统中存在的漏洞,然后讨论扩展安全性的进展,重点介绍攻击面及其与已实施缓解措施的关系。最后,本文将推荐一些 CodeQL 查询和最佳实践,供用户、开发者和研究人员使用,以确保扩展的安全性。
要点
浏览器扩展的安全性主要依赖于其结构和权限管理。扩展由 HTML、CSS 和 JavaScript 文件组成,通过
manifest.json
文件配置其运行环境和权限。扩展的三个主要运行环境是网页 / 内容脚本、弹出窗口和后台脚本。每个环境都有其特定的权限和安全风险。
【第3132期】结合 React Fiber 结构与 chrome 插件,谈谈无侵入自动化表单的技术尝试
分析
扩展结构
扩展的核心概念包括 HTML、CSS 和 JavaScript 文件,这些文件通过
manifest.json
文件配置其运行环境和权限。扩展的三个主要运行环境是网页 / 内容脚本、弹出窗口和后台脚本。每个环境都有其特定的权限和安全风险。
-
后台脚本:后台脚本可以访问大多数浏览器扩展 API,具有强大的控制能力,如控制标签、读取网站内容或修改和读取 cookie。这些能力通常需要特定的权限,并在
manifest.json
文件中请求。
-
内容脚本:内容脚本运行在网页的上下文中,但位于隔离的世界中,无法访问主机页面或其他扩展的内容脚本的 JavaScript 变量。内容脚本通常用于与 DOM 交互,如添加页面摘要或翻译文本。
-
弹出窗口:弹出窗口是用户点击扩展图标时出现的菜单,通常允许用户直接与扩展功能交互,如更改设置或向扩展的后端服务器发送请求。
-
manifest.json 文件:列出扩展程序的身份、所需权限和可访问性。随著浏览器生态系统的发展, manifest.json 文件的版本也在不断更新,新版本通常会强制执行更安全的设置。
攻击面
浏览器扩展程序的攻击面主要来自两个方面
一些特定的配置错误也会增加攻击面
常见的攻击包括跨站脚本(XSS)、服务器端请求伪造(SSRF)和扩展 API 注入。
-
XSS:XSS 漏洞在内容脚本和后台脚本中都可能存在。XSS 允许攻击者执行与扩展相同权限的 JavaScript 代码,从而控制整个浏览器。
-
SSRF:如果攻击者能够影响网络请求的 URL,可能会导致 SSRF 漏洞。SSRF 的效果取决于请求的方法、是否包含凭据 /cookie 以及扩展的
manifest.json
文件中是否允许该网站。
-
扩展 API 注入:如果攻击者能够将数据注入到 API 调用中,可能会获得扩展的能力。常见的 API 包括
downloads.download()
、书签创建或删除功能以及 cookie 的
set
函数。
缓解措施
浏览器开发者为减轻这些漏洞的风险,采取了以下缓解措施
-
从 v2 到 v3 的更新:manifest v3 弃用了 unsafe-eval 指令,提高了 XSS 攻击的难度。manifest v3 限制了没有 host_permissions 的扩展程序发送带有 Cookie 的请求,降低了 SSRF 攻击的风险。
-
UUID 随机化:浏览器会随机化扩展程序的 ID (UUID),防止攻击者攻击暴露的 HTML 文件。Firefox 和 Safari 默认随机化 UUID,而 Chromium 直到 2024 年 8 月才默认启用 UUID 随机化。
使用 CodeQL 建模
CodeQL 可以用于建模和分析浏览器扩展程序中的漏洞,例如 XSS 和 SSRF。通过创建自定义的 CodeQL 查询,可以识别潜在的安全风险,例如:
案例
以 smartup 扩展程序为例,展示了 CodeQL 如何发现 UXSS 漏洞。该漏洞源于扩展程序未正确处理外部消息,导致攻击者可以注入恶意代码,并在具有广泛权限的背景脚本中执行。