recientemente 发现一个漏洞 这可能会使维护者阻止过滤器列表 适用于Adblock Plus,AdBlock和uBlocker浏览器扩展 创建将远程脚本注入网站的过滤器。
拥有超过10万大关的用户群, 如果将恶意脚本注入广告拦截器中,将会产生很大的影响 因为它们可能会进行有害的活动,例如盗窃Cookie,连接信息,导致页面重定向或其他有害行为。
对于那些 对广告拦截器不熟悉,他们基本上使用网址列表 与恶意广告和行为有关。
通常情况下, 它们由一小群人甚至一个人经营。
当这些列表加载有广告阻止扩展程序(例如Adblock Plus)时,此扩展程序将阻止浏览器连接到列表中放置的URL,从而防止连接到恶意广告或脚本。
$ rewrite过滤器选项引起了问题
何时 广告拦截器加 3.2 它于2018年推出 添加了一个新的过滤器列表选项,称为$ rewrite。
这个选项 允许的 到列表维护者 替换与正则表达式匹配的Web请求 特别是另一个URL。
休伯特·菲盖尔(HubertFiguière), 谁介绍了这个功能 解释说:
“自从Adblock Plus 3.2适用于Chrome,Firefox和Opera(以及3.1.0.2053开发版本)以来,新的$ rewrite过滤器选项使您可以重写资源的URL,而不是对其进行阻止。
当Adblock Plus使用$ rewrite选项将请求URL分配给过滤器时,它会根据提供的规则转换URL,并告诉浏览器同时加载资源。
$规则的语法 rewrite指定一个字符串,用作新URL的模板。
$ n被过滤器的正则表达式第n个子匹配替换。 这与JavaScript String.prototype.replace()函数的语法相同。
如果结果URL是相对的 (即您没有主机), 原始查询的来源将用作基础。 在任何一种情况下,如果新URL不共享源,则重写将被视为不成功,并且初始请求将通过。
同样,出于安全原因,对于SCRIPT,SUBDOCUMENT,OBJECT和OBJECT_SUBREQUEST查询,$ rewrite过滤器也将被忽略。 使用此选项可以方便地修改或消除查询参数»。
唯一的缺点是替换字符串必须是一个相对URL,这意味着它不包含主机名,并且在重写时,它必须与请求属于同一原始域。
代码执行甚至在Google地图上完成
一位安全研究员解释 即:
在某些情况下,未经授权的恶意筛选器维护者有可能创建将远程脚本注入特定站点的规则。
为此, 只是寻找一个加载脚本的网站 来自任何包含开放重定向的域 并使用XMLHttpRequest或Fetch 下载脚本以运行。
很难找到它,因为一个人就能做到 只是使用Google Maps作为概念证明。
研究人员解释说 必须满足以下条件 这样就可以利用此方法利用Web服务:
- 该页面必须使用XMLHttpRequest或Fetch加载JS字符串并执行返回代码。
- 该页面不应限制使用内容安全策略准则可从中检索页面的来源,或在运行下载的代码之前验证最终请求URL。
- 检索到的代码的源必须具有开放的服务器端重定向或来自主机的任意用户内容。
使用XMLHttpRequest或Fetch下载脚本并打开重定向是解决此问题的两个关键。
为了减轻这个问题, 建议网站使用内容安全策略标头和connect-src选项 指定可以从中加载脚本的网站的白名单。
成为第一个发表评论