最近 发现 流行的广告拦截器«Adblock Plus»具有一个漏洞,可以组织JavaScript代码的执行 在网站上,如果使用未经第三方测试的过滤器 怀有恶意 (例如,通过连接第三方规则集或在MITM攻击期间通过规则替换)。
列出具有过滤器集的作者 可以在可访问的网站的上下文中组织其代码的执行 用户使用运算符»$ rewrite«添加规则,从而可以替换部分URL。
如何执行此代码?
的声明 $ rewrite不允许替换主机 在网址中 但它提供了自由操纵论据的机会 的请求。
但 可以实现代码执行。 某些网站,例如Google Maps,Gmail和Google图片, 他们使用了动态加载以纯文本形式传输的可执行JavaScript块的技术。
如果服务器允许重定向请求,则可以通过更改URL的参数将其转发到另一台主机(例如,在Google的上下文中,可以通过»google.com/search«API进行重定向) 。
加 允许重定向的主机,您也可以发起攻击 针对允许用户内容定位的服务(代码托管,文章放置平台等)。
的方法 拟议的攻击仅影响使用JavaScript代码动态加载字符串的页面 (例如,通过XMLHttpRequest或Fetch),然后运行它们。
另一个主要限制是需要使用重定向或将任意数据放置在提供资源的原始服务器一侧。
然而, 证明攻击的相关性,向您展示如何通过使用“ google.com/search”重定向来打开maps.google.com来组织代码执行。
实际上,使用$ rewrite选项时,使用XMLHttpRequest或Fetch下载要运行的远程脚本的请求不会失败。
另外,开放重定向也同样重要,因为它允许XMLHttpRequest从远程站点读取脚本,即使该脚本似乎来自同一源。
他们已经在努力解决问题
解决方案仍在准备中。 该问题还会影响AdBlock和uBlock阻止程序。 uBlock Origin Blocker不支持该问题,因为它不支持»$ rewrite»运算符。
曾经,uBlock Origin作者拒绝添加$重写支持,理由是可能存在安全性问题和主机级别限制不足(建议使用querystrip选项清除查询参数,而不是替换它们,而不是进行重写)。
保护用户是我们的责任。
尽管实际风险非常低,我们还是决定删除$ rewrite选项。 因此,我们将在技术上尽快发布Adblock Plus的更新版本。
我们这样做是为了预防。 没有尝试滥用重写选项,我们将尽力防止这种情况的发生。
这意味着不会对任何Adblock Plus用户造成威胁。
DAdblock Plus开发人员认为实际攻击不太可能,因为对常规规则列表的所有更改都会得到审核,并且用户很少实践第三方列表的连接。
默认情况下,通过MITM进行规则替换会删除HTTPS的使用 加载常规阻止列表(对于其余列表,计划在将来的版本中禁止HTTP下载)。
为了阻止网站方面的攻击, 可以应用CSP指令 (内容安全策略),通过它可以明确标识可以从其加载外部资源的主机。
数据来源: https://adblockplus.org, https://armin.dev