浏览器扩展有以下特点,认为是不错的攻击目标
- 使用量大
- 功能和权限非常丰富
- 开发者鱼龙混杂
- 业界关注度不高
本文尝试从整体组件架构和历史漏洞出发,总结攻击链路,尝试挖掘漏洞并进行攻击利用
原文写于2023.5内部分享,现简单编辑后拆分为3篇发出
介绍Chrome扩展的各种组件功能和通信机制,和一些参考资料
结合漏洞案例,分析各组件的攻击面,最终绘制完整的攻击链路图
对商店的全量扩展进行扫描分析,统计风险和漏洞情况
组件介绍
首先大概了解一下Chrome扩展中的几个关键组件
在阅读时可以同步打开一个本地扩展认识一下
macOS默认在
~/Library/Application Support/Google/Chrome/Default/Extensions
Windows默认在%localappdata%\Google\Chrome\User Data\Default\Extensions
manifest.json
扩展程序的配置清单,在扩展程序代码的根目录
- 名称,描述,版本等
- API权限定义,如读写书签/历史/Cookie等Chrome API
- 网站权限定义,允许无视同源策略访问哪些网站
- 定义
Content scripts是哪些js,在哪里何时运行等 - 定义
Background scripts是哪些js CSP策略…


Content scripts
在manifest.json中的content_scripts定义
在每个标签页中运行,每个扩展一个隔离环境,有独立的JavaScript变量,CSP策略等,同时拥有一部分Chrome API功能,只与网页中的JS使用同一个DOM
一般用来处理与网页DOM相关的功能,或与Background scripts通信交互完成相关功能
同源策略与所在的标签页相同

Inject scripts
由于Content scripts与网页隔离,有些功能又需要访问网页空间中的数据
扩展程序往往会在Content scripts中通过DOM注入script标签执行一些代码,这个脚本被我称之为Inject scripts
1 | let script = document.createElement('script') |
Inject scripts是一个非常特别的存在,与网页中的其他JS同等地位,也混淆了扩展程序代码和网页代码,也引入了一些攻击面,这部分再漏洞篇细讲
Background scripts
在manifest.json中的background定义
可以理解为扩展程序的后台服务,拥有完整的Chrome API功能,但不能直接访问DOM
一般用于持续运行的功能,或依赖相关Chrome API的功能
在一定的权限设定下,无同源策略限制
在Manifest V2中是一个HTML,叫background.html,如果是JS的话会自动生成一个HTML

在Manifest V3中是一个JS,叫Service Worker

还有一些页面与Background地位相同,但位置不同,而且只在打开相关页面的时候才会运行,不会一直运行
在manifest.json中browser_action中定义
是点击扩展图标后弹出的页面,权限与Background组件相同

Options
在manifest.json中options_page定义
为扩展的选项页,权限与Background组件相同

通信架构

Webpage是指网页Javascript的空间,与Content共享DOM,其中window比较特殊,虽然是共用一个window,但有变量隔离,具体细节后面在讲
由于共用window,Webpage与Content可以使用window.postMessage进行通信
为了简化架构图,Background包含了background.html,Service Worker,Popup,Options等组件,因为他们的权限和地位都相同
在Content和Backgroud之间则使用Chrome API用于传递数据
不过需要注意的是,当Content调用chrome.runtime.sendMessage时其实在向所有Background页面中广播
同理,Background页面之间使用chrome.runtime.sendMessage发送消息时也相当于在广播
另外Chrome API中有提供了获取相关Background页面window的函数,获取window之后就可以使用window.postMessage进行通信
参考
LoRexxar入门系列
从 0 开始入门 Chrome Ext 安全(一) – 了解一个 Chrome Ext
从 0 开始入门 Chrome Ext 安全(二) – 安全的 Chrome Ext
从 0 开始入门 Chrome Ext 安全(三) – 你所未知的角落 - Chrome Ext 安全
Wladimir Palant入门系列
Impact of extension privileges)
Attack surface of extension pages)
When extension pages are web-accessible
文档
Extensions - Chrome Developers
Paper
DEF CON 29 - Barak Sternberg - Extension Land: Exploits and Rootkits in Your Browser Extensions