G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Proto

admin 2022年5月12日23:36:40评论29 views字数 3327阅读11分5秒阅读模式

今天给大家推荐的论文是来自约翰霍普金斯大学曹寅志研究组投稿的关于原型污染上漏洞挖掘的最新工作Probe the Proto: Measuring Client-Side Prototype Pollution Vulnerabilities of One Million Real-world Websites,目前该工作已经在NDSS 2022上发表。

G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Proto


原型污染是一种2018年提出的相对较新的 JavaScript 漏洞类型。这种漏洞的存在是由于 JavaScript 的一个特性,称为原型链 (prototype chain)。它允许 Javascript 在当前对象 (object) 中查找不到某一特定属性时,沿着一系列原型对象继续查找。更具体地说,原型污染使攻击者能够在原型对象(例如 Object.prototype)下注入或修改属性,从而影响易受攻击的程序的正常执行(如控制流和数据流)。比如说,有一个像 obj[key1][key2]=val 这样的属性查找和赋值。如果所有三个变量,即 key1、key2 和 val,都可以由攻击者控制,则攻击者可以使用 obj["__proto__"]["prop"]="polluted" 在原型对象下添加一个名为 prop 的属性。然后,如果有漏洞的 JavaScript 通过 anotherObj.prop 访问 anotherObj 下的未定义属性 prop,则属性查找会通过原型链,返回攻击者定义的值,即 "polluted",这样的漏洞类型被称为原型污染。


虽然原型污染已经开始引起学界的注意,但还没有学者系统研究过原型污染在成功触发后除了污染原型对象之外还会导致什么进一步的后果。例如,如果与原型污染漏洞位于同一位置的另一段 JavaScript 代码循环遍历某一对象的所有属性以生成 HTML 代码,则此原型污染将允许攻击者注入任意 JavaScript 代码,导致跨站点脚本 (XSS)。据相关统计所知,先前的学术工作没有系统地研究原型污染的进一步后果,尤其是在现实世界网站的客户端 JavaScript 中。抛开后果分析不谈,先前的基于静态分析的后端检测原型污染的方法对于前端原型污染检测的任务既不具有可扩展性也不具有准确性。总结起来,尚没有工作研究过客户端 JavaScript 中原型污染的普遍程度,更不用说原型污染可能导致的后果(如XSS 和 cookie 操控)。


针对于这些问题,这篇论文提出了名为 ProbetheProto 的针对于客户端原型污染的漏洞挖掘工具,并且实现了对一百万个真实世界网站的客户端原型污染漏洞及其后果的首次大规模测量。结果显示,2738 个真实世界的网站(包括前 1000 个网站中的 10 个)易受 2917 个原型污染零日漏洞的影响;不仅如此,由于原型污染的存在,48 个漏洞进一步导致 XSS,736 个漏洞导致 cookie 操控,830 个漏洞导致 URL 操控。


在衡量客户端原型污染和后果方面存在两个主要挑战,这启发了 ProbetheProto 的两个核心模块,即动态污点分析和输入/利用生成器。

首先,成功的原型污染以及进一步的后果通常由两个或多个链接在一起的属性查找组成。也就是说,一个原型污染漏洞有多个按特定顺序调用的接收器,而不是传统的污染型漏洞(如基于 DOM 的 XSS)中的仅一个接收器。因此, ProbetheProto 跟踪所谓的联合污点流,以在属性查找和赋值过程中检测原型污染。具体而言,对于像 o=obj[prop] 这样的属性查找, ProbetheProto 采用了一个新的污点值,称为对象污点。如果属性(即prop)被污染,则返回的对象 o 将被跟踪。最终,当 ProbetheProto 在形如 o[prop1]=value 的属性赋值中检测到三个不同污染流的联合(即,o 是对象污点,prop1 和 value 是传统的值污点),便将其记录为原型污染。

其次,第二个挑战在于与原型污染后果相关的最终汇 (final sink) 可能无法直接到达。例如,汇可能仅在对象下的某个属性存在时才被触发,产生相应的后果。因此, ProbetheProto 采用了一个输入/利用生成模块,基于属性查找和不同的汇函数来主动创建对象属性。具体来说, ProbetheProto 执行多次动态污染分析,第一次运行中记录缺失的属性,然后在后续运行中生成这些之前缺失的属性,以达到最终汇,从而触发相应的后果。比如,XSS的最终汇包括innerHTML和 setAttribute 等;cookie 操控的最终汇为 document.cookie。

在 ProbetheProto 为易受攻击的网站生成漏洞利用程序后, ProbetheProto 将通过在普通浏览器上执行并检查后果来进一步验证它们。例如,第三方脚本的执行以检验 XSS;将字符串注入 cookie 或 URL 以检验 cookie/URL 操控。然后,作者会将发现的漏洞详细信息及建议的修复方式报告给相应的网站维护人员或开发人员。同时, ProbetheProto 还会分析、统计网站中针对于原型污染的防御方法。


ProbetheProto 的整体架构如下图所示:


G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Proto


ProbetheProto 有两个主要部分:

  1. 联合污染流分析

  2. 结果验证

其中(a) 包括之前介绍过的动态污点分析和输入/利用生成器。在 (a) 部分中,ProbetheProto 爬取网站执行动态污染分析以找到联合污染流,并相应地生成一个漏洞利用。考虑使用联合污染流的原因是,原型污染由两个或多个形如 o=obj[prop] 的属性查找和 o[prop]=value 的属性分配组成,因此仅用单个污染流进行分析无法满足需求。如果未找到联合污染流,ProbetheProto 还会生成额外的输入并重复该过程,以减少假阴性率。

在(b)部分中,ProbetheProto 首先验证 (a) 部分提供的漏洞利用代码成功触发了原型污染;接下来,作者用漏洞利用代码和手动生成的修复建议向网站维护者报告发现的漏洞。同时,ProbetheProto 还会进一步分析网站上是否部署了一定的原型污染防御。下表统计了ProbetheProto 发现的原型污染漏洞及其后果。可以看出,URL search(即document.location.search)带来的原型污染最为普遍;Cookie操控及URL操控比XSS发生的频率高出不少。


G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Proto


作者进一步衡量了ProbetheProto 在假阴性率、代码覆盖率和performance overhead上的表现,结果均令人满意。例如,在使用来自某个 Github repo 的手动注释基准来测量 ProbetheProto 的假阴性率时,真阳性率达到了90.5%(检测原型污染时)和79.1%(检测带来的后果时)。此外,作者还将先前论文中针对于服务器端Node.js原型污染的名为 ObjLupAnsys 的检测工具移植到客户端,用来与 ProbetheProto 作对比。结果显示,ProbetheProto 的检测结果明显优于 ObjLupAnsys,ObjLupAnsys仅检测到4个有漏洞的网站,而ProbetheProto可以检测到2738个存在漏洞的网站!


G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Proto


论文下载:

https://www.ndss-symposium.org/wp-content/uploads/2022-308-paper.pdf

ProbetheProto 代码已经开源: 

https://github.com/client-pp/ProbetheProto. 

ProbetheProto找到的存在漏洞的网站清单:

https://github.com/clientpp/ProbetheProto/blob/main/vul_site_info.md. 


作者特别提及,感谢 ACM TechNews、CyberWire Daily、i-programmer 及JHU hub 对 ProbetheProto 工作的追踪报道。




投稿作者介绍:

康梓峰 约翰霍普金斯大学

康梓峰是约翰霍普金斯大学计算机系三年级博士,师从曹寅志老师,本科毕业于清华大学。他的研究主要包括网络安全、系统安全和程序分析。


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Proto

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月12日23:36:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 每日阅读推荐 2022-05-12 Probe the Protohttp://cn-sec.com/archives/1002612.html

发表评论

匿名网友 填写信息