浏览器扩展有以下特点,认为是不错的攻击目标
- 使用量大
- 功能和权限非常丰富
- 开发者鱼龙混杂
- 业界关注度不高
本文尝试从整体组件架构和历史漏洞出发,总结攻击链路,尝试挖掘漏洞并进行攻击利用
原文写于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