12 KiB
BrowExt - 权限和主机权限
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs收藏品
- 加入 💬 Discord群组 或 电报群组 或 关注我们的Twitter 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
基本信息
permissions
权限在扩展的**manifest.json
文件中使用permissions
**属性进行定义,允许访问几乎任何浏览器可以访问的内容(如Cookies或物理存储):
上述清单声明扩展需要storage
权限。这意味着它可以使用存储API来持久存储其数据。与给用户一定程度控制权的Cookies或localStorage
API不同,扩展存储通常只能通过卸载扩展来清除。
扩展将在其**manifest.json
文件中请求所需的权限,安装扩展后,您可以随时在浏览器中检查其权限**,如下图所示:
您可以在此处找到Chromium浏览器扩展可以请求的完整权限列表,以及Firefox扩展的完整列表。
host_permissions
可选但功能强大的设置**host_permissions
**指示扩展将能够通过诸如cookies
、webRequest
和tabs
等API与哪些主机进行交互。
以下host_permissions
基本上允许每个网站:
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
这些是浏览器扩展可以自由访问的主机。这是因为当浏览器扩展调用**fetch("https://gmail.com/")
**时,它不受CORS限制。
滥用permissions
和host_permissions
标签
此外,host_permissions
还解锁“高级”标签 API功能。它们允许扩展调用tabs.query(),不仅可以获取用户浏览器标签的列表,还可以了解加载的网页(即地址和标题)。
{% hint style="danger" %} 不仅如此,像tabs.onUpdated这样的监听器也变得更加有用。每当新页面加载到标签中时,它们将收到通知。 {% endhint %}
运行内容脚本
内容脚本不一定静态地写入扩展清单中。在具有足够的**host_permissions
**的情况下,扩展还可以通过调用tabs.executeScript()或scripting.executeScript()动态加载它们。
这两个 API 允许执行不仅包含在扩展中的文件作为内容脚本,还可以执行任意代码。前者允许将 JavaScript 代码作为字符串传递,而后者期望一个 JavaScript 函数,这样更不容易受到注入漏洞的影响。然而,如果被滥用,这两个 API 都会造成严重破坏。
{% hint style="danger" %} 除了上述功能,内容脚本还可以例如拦截凭据,因为这些凭据是输入到网页中的。滥用它们的另一个经典方式是在每个网站上注入广告。添加欺诈信息以滥用新闻网站的信誉也是可能的。最后,它们还可以操纵银行网站以重新路由资金转账。 {% endhint %}
隐式权限
一些扩展权限无需明确声明。一个例子是tabs API:它的基本功能可以在没有任何权限的情况下访问。任何扩展都可以在您打开和关闭标签时收到通知,只是它不会知道这些标签对应的是哪个网站。
听起来太无害了吗?tabs.create() API则稍微不同。它可以用于创建一个新标签,基本上与window.open()相同,任何网站都可以调用它。然而,window.open()
受到弹出窗口拦截器的限制,而tabs.create()
则没有。
{% hint style="danger" %} 扩展可以随时创建任意数量的标签。 {% endhint %}
如果您查看可能的tabs.create()
参数,您还会注意到它的功能远远超出了window.open()
被允许控制的范围。而且,虽然 Firefox 不允许使用data:
URI 与此 API 一起使用,但 Chrome 没有这种保护。在顶级使用这种 URI 已经因被用于钓鱼而被禁止。
tabs.update()与tabs.create()
非常相似,但会修改现有标签。因此,恶意扩展可以任意地将广告页面加载到您的标签中,并且还可以激活相应的标签。
摄像头、地理位置和其他权限
您可能知道网站可以请求特殊权限,例如访问您的摄像头(视频会议工具)或地理位置(地图)。这些功能具有被滥用的潜力,因此用户每次都必须确认他们仍然希望这样做。
{% hint style="danger" %} 但浏览器扩展不同。如果浏览器扩展想要访问您的摄像头或麦克风,它只需要请求一次权限 {% endhint %}
通常,扩展会在安装后立即这样做。一旦接受了此提示,摄像头访问随时都可能发生,即使用户此时没有与扩展进行交互。是的,用户只有在扩展确实需要摄像头访问时才会接受此提示。但之后,他们必须信任扩展不会秘密记录任何内容。
通过访问您的精确地理位置或剪贴板内容,无需明确授予权限。扩展只需将geolocation
或clipboard
添加到清单的权限条目中。这些访问权限在安装扩展时隐含授予。因此,具有这些权限的恶意或受损扩展可以创建您的移动轨迹文件或监视您的剪贴板以复制密码,而您却察觉不到。
将**history
关键字添加到扩展清单的权限条目中授予对历史 API的访问权限**。它允许一次性检索用户的整个浏览历史记录,而无需等待用户再次访问这些网站。
bookmarks
权限具有类似的滥用潜力,它允许通过书签 API读取所有书签。
存储权限
扩展存储仅是一个键值集合,与任何网站都可以使用的localStorage非常相似。因此,不应在此处存储敏感信息。
然而,广告公司也可以滥用此存储。
更多权限
您可以在此处找到Chromium 浏览器扩展可以请求的完整权限列表,以及Firefox 扩展的完整列表。
预防
谷歌开发者的政策明确禁止扩展请求比其功能所需更多的权限,有效地减少了过度权限请求的可能性。一个扩展超越这一界限的例子涉及将其与浏览器本身一起分发,而不是通过附加组件商店。
浏览器可以进一步限制扩展权限的滥用。例如,Chrome 的tabCapture和desktopCapture API,用于屏幕录制,旨在最小化滥用。tabCapture API 只能通过直接用户交互(例如单击扩展图标)激活,而 desktopCapture 需要用户确认才能录制窗口,防止秘密录制活动。
然而,加强安全措施通常会导致扩展的灵活性和用户友好性降低。activeTab 权限说明了这种权衡。它旨在消除扩展需要跨整个互联网请求主机权限的需求,允许扩展仅在用户明确激活时访问当前标签。这种模式对于需要用户发起操作的扩展非常有效,但对于需要自动或预防性操作的扩展来说效果不佳,从而损害了便利性和即时响应性。
参考资料
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs
- 加入 💬 Discord群 或 电报群 或在Twitter 🐦 @carlospolopm上关注我们。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。