Armin.dev博客报道 ,在许多情况下,在AdBlock,AdBlock Plus和uBlock
于2018年7月17日发布的更新3.2中实现的
$rewrite
过滤器选项允许在显示给用户的网页上执行任意代码。
以下是AdBlock补丁程序本身对问题功能的描述:
此修补程序实现了新的$rewrite
过滤器选项,该选项允许过滤器列表的作者阻止以前无法在许多网站上显示的广告的显示(主要是视频)。
所描述的漏洞会影响所有提及的三个广告拦截器,它们的总访问量超过1亿用户。 您可以使用它来攻击任何网络服务,包括但不限于Google的任何资源。 这个问题很普遍,也就是说,可以在任何流行的浏览器上进行同样成功的攻击,而并不取决于其版本。
该漏洞持续了将近9个月,直到现在才被发现。攻击的实质
源博客作者解释说,AdBlock和其他提到的阻止程序使用
$rewrite
选项来避免跟踪用户和通过重定向来自所访问网页的请求来阻止广告。 因此,
$rewrite
允许您重定向而不处理诸如
SCRIPT
,
SUBDOCUMENT
,
OBJECT
和
OBJECT_SUBREQUEST
类的请求。
如果网站使用
XMLHttpRequest
或
Fetch
下载并执行代码段,同时允许进行任意请求,则可能会发生攻击。
也就是说,要进行攻击,必须满足三个条件:
- 网页应使用
XMLHttpRequest
或Fetch
加载JS字符串并执行返回的代码。 - 该网页不应使用“ 内容安全策略”验证指令,也不应在执行下载的代码之前验证最终URL。
- 提取的代码的源必须支持服务器端重定向,或包含用户生成的任意内容。
似乎有很多条件,而且CSP在Web开发领域并不是一件新鲜事。 但是,发现的漏洞的主要威胁不是它的工作方式,而是它的传播方式。
由于AdBlock,AdBlock Plus和uBlock筛选器系统易受攻击,因此“感染”最终受害者的方法非常简单-通过筛选器的自动更新系统。 绝大部分用户都使用现成的过滤器,但不要自己配置它们,这已不是什么秘密。 在这种情况下,筛选器包的作者可以推出恶意更新,进行攻击,然后“推出”该包,从而“扫除轨道”。
战斗方式
保护自己免受提到的漏洞影响的最简单方法是切换到uBlock Origin。 此广告拦截器不支持
$rewrite
功能,也就是说,不可能通过它来实现所描述的攻击。
否则,后果自负,您应该等待下一次AdBlock更新。 在armin.dev博客中发布后几个小时,
此博客条目出现在官方的阻止者博客中,以应对
$rewrite
漏洞。
在其中,AdBlock管理部门确保即使该漏洞是特定的,他们也非常注意其受众的安全性,
在下一次更新中 , $rewrite
功能将从AdBlock中
删除 。
另外,根据主管部门的保证,他们现在检查所有过滤器列表并再次进行检查。 根据审核结果,管理部门报告说,现有过滤器列表均未描述攻击所包含用户的方法。 假设从原始帖子发布到对AdBlock博客的回复之间仅过去了四个小时,我们将为阻止者团队的响应能力而感到高兴。
同时,从项目中删除
$rewrite
功能对于AbBlock而言是一个倒退,因为它最初是为与弹出式视频广告作斗争而创建的。 现在,她将为了普遍安全而返回。 此外,决定完全从项目中删除
$rewrite
的速度表明,尽管攻击是特定的,但其大规模行为的后果却太怪异了。