BrowExt - permissions & host_permissions
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:
HackTricks 培训 GCP 红队专家 (GRTE)
基本信息
permissions
permissions
权限在扩展的 manifest.json
文件中使用 permissions
属性定义,允许访问浏览器可以访问的几乎所有内容(Cookies 或物理存储):
前面的清单声明该扩展需要 storage
权限。这意味着它可以使用 存储 API 持久存储其数据。与给用户一定控制权的 cookies 或 localStorage
API 不同,扩展存储通常只能通过卸载扩展来清除。
扩展将请求其 manifest.json
文件中指示的权限。安装扩展后,您可以 随时在浏览器中检查其权限,如图所示:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F902778555-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FVXPBd5ePyq2S6WpIV6Cj%252Fuploads%252Fgit-blob-ae8c5810e298e16745afa2df931093b727ad5bb1%252Fimage%2520%2818%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=cf42003d&sv=1)
您可以在这里找到 Chromium 浏览器扩展可以请求的完整权限列表 和 Firefox 扩展的完整列表在这里.
host_permissions
host_permissions
可选但强大的设置 host_permissions
指示扩展将能够通过 cookies
、webRequest
和 tabs
等 API 与哪些主机进行交互。
以下 host_permissions
基本上允许每个网页:
这些是浏览器扩展可以自由访问的主机。这是因为当浏览器扩展调用 fetch("https://gmail.com/")
时,它不受 CORS 的限制。
滥用 permissions
和 host_permissions
permissions
和 host_permissions
标签页
此外,host_permissions
还解锁了“高级” tabs API 功能。 它们允许扩展调用 tabs.query(),不仅可以获取 用户的浏览器标签页列表,还可以了解 加载了哪个网页(即地址和标题)。
不仅如此,像 tabs.onUpdated 这样的监听器也变得更加有用。 每当新页面加载到标签页中时,它们将收到通知。
运行内容脚本
内容脚本不一定是静态写入扩展清单中的。只要有足够的 host_permissions
,扩展也可以通过调用 tabs.executeScript() 或 scripting.executeScript() 动态加载它们。
这两个 API 允许执行不仅仅是包含在扩展中的文件作为内容脚本,还可以执行 任意代码。前者允许将 JavaScript 代码作为字符串传入,而后者期望一个 JavaScript 函数,这样更不容易受到注入漏洞的影响。不过,如果滥用,这两个 API 都会造成严重后果。
除了上述功能,内容脚本还可以例如 拦截凭据,当这些凭据输入到网页时。滥用它们的另一种经典方式是在每个网站上 注入广告。添加 诈骗信息 以滥用新闻网站的可信度也是可能的。最后,它们可以 操纵银行 网站以重新路由资金转移。
隐式权限
某些扩展权限 不必明确声明。一个例子是 tabs API:其基本功能在没有任何权限的情况下也可以访问。任何扩展都可以在您打开和关闭标签页时收到通知,只是它不会知道这些标签页对应哪个网站。
听起来太无害了?tabs.create() API 就不那么无害了。它可以用来 创建一个新标签页,本质上与任何网站都可以调用的 window.open() 相同。然而,虽然 window.open()
受 弹出窗口拦截器 的限制,但 tabs.create()
不受此限制。
扩展可以在任何时候创建任意数量的标签页。
如果您查看可能的 tabs.create()
参数,您还会注意到它的功能远远超出了 window.open()
被允许控制的范围。虽然 Firefox 不允许在此 API 中使用 data:
URI,但 Chrome 没有这样的保护。在顶层使用此类 URI 已被 禁止,因为它们被滥用于网络钓鱼。
tabs.update() 与 tabs.create()
非常相似,但会 修改现有标签页。因此,恶意扩展可以例如任意加载一个广告页面到您的标签页中,并且它还可以激活相应的标签页。
网络摄像头、地理位置等
您可能知道,网站可以请求特殊权限,例如访问您的网络摄像头(视频会议工具)或地理位置(地图)。这具有相当大的滥用潜力,因此用户每次都必须确认他们仍然希望这样做。
浏览器扩展则不是这样。如果浏览器扩展 想要访问您的网络摄像头或麦克风,它只需请求一次权限
通常,扩展会在安装后立即这样做。一旦接受此提示,随时可以访问网络摄像头,即使用户此时没有与扩展交互。是的,用户只有在扩展确实需要网络摄像头访问时才会接受此提示。但在那之后,他们必须信任扩展不会秘密录制任何内容。
访问 您确切的地理位置 或 剪贴板内容 时,显式授予权限根本不是必要的。扩展只需将 geolocation
或 clipboard
添加到其 清单的权限条目 中。 这些访问权限在扩展安装时隐式授予。因此,具有这些权限的恶意或被攻陷的扩展可以在您未注意到的情况下创建您的移动档案或监控您剪贴板中的复制密码。
将 history
关键字添加到扩展清单的 permissions entry 中授予 访问 history API。它允许一次性检索用户的整个浏览历史,而无需等待用户再次访问这些网站。
bookmarks
权限 具有类似的滥用潜力,它允许 通过 bookmarks API 读取所有书签。
存储权限
扩展存储仅仅是一个键值集合,非常类似于任何网站都可以使用的 localStorage。因此,不应在此处存储敏感信息。
然而,广告公司也可能滥用此存储。
更多权限
您可以在这里找到 Chromium 浏览器扩展可以请求的完整权限列表 和 Firefox 扩展的完整列表。
预防
谷歌开发者的政策明确禁止扩展请求超出其功能所需的权限,从而有效减轻过度权限请求的情况。一个浏览器扩展超越这一界限的例子是它与浏览器本身一起分发,而不是通过附加组件商店。
浏览器还可以进一步遏制扩展权限的滥用。例如,Chrome 的 tabCapture 和 desktopCapture API,用于屏幕录制,旨在最小化滥用。tabCapture API 只能通过直接用户交互(例如点击扩展图标)激活,而 desktopCapture 需要用户确认要录制的窗口,从而防止秘密录制活动。
然而,收紧安全措施往往会导致扩展的灵活性和用户友好性降低。activeTab permission 就说明了这种权衡。它的引入消除了扩展请求整个互联网的主机权限的需要,允许扩展在用户明确激活时仅访问当前标签页。该模型对于需要用户主动操作的扩展有效,但对于需要自动或预先操作的扩展则显得不足,从而妨碍了便利性和即时响应。
参考文献
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:
HackTricks 培训 GCP 红队专家 (GRTE)
Last updated