G.O.S.S.I.P 阅读推荐 2023-09-04

今天我们首先要给大家力推的是 G.O.S.S.I.P 澳洲分部所维护的公众号——SecNotes(赶紧加关注!),以后我们的阅读推荐将由 G.O.S.S.I.P 上海分部和澳洲分部共同维护,也欢迎更多的高质量创作者加入 G.O.S.S.I.P 编辑部哦~

在今天这篇来自SecNotes的论文笔记中,介绍了IEEE S&P 2023的论文 It’s (DOM) Clobbering Time: Attack Techniques, Prevalence, and Defenses

https://publications.cispa.saarland/3756/1/sp23_domclob.pdf

下面是笔记原文,大家也可以直接访问 SecNotes 原始链接



今天分享一篇来自德国CSIRO的文章,介绍有关DOM的攻击漏洞。DOM我们学前端的时候都了解过,是HTML和JS相互关联的一些API。


那么针对HTML和JS,有很多经典的攻击方式,例如XSS攻击。当然也有其他不那么出名的攻击方式,例如本文中介绍的DOM Clobbering attack。本文详细分析




01



DOM Clobbering attack


DOM Clobbering是一个源自JavaScript变量和HTML元素之间的命名冲突的漏洞。

举个例子,这里有两个Listing,看起来并没有什么问题,但是实际上,在Listing2 的第二行, document.documentElement.getAttribute(baseURI)这个变量实际上可以代表两种不同的含义

  1. document.documentElement元素(也就是<html>这个元素)里面的“baseURI” 这个attribute

  2. document里面name = documentElement 的元素的“baseURI” 这个attribute


可能说起来不是很直观,那么给出一个我自己测试的例子

这个例子里面,我们可以看到html元素有一个attribute是baseURI

如果JS文件这样去获取,getAttribute('baseURI'). 那么我们可以看到的输出就是:

成功获取attribute

但是如果,我们在HTML里面添加一个form,form的名字是documentElement

那么相同的JS,输出就变成了:

由于不同浏览器对于JS的解析方式不同,就可能导致“DoM加载错误”的问题出现。从而可能会导致网站错误访问恶意的文件。

这种情况也发生在很多别的地方,例如说document.baseURI这个操作本来是获取当前的URL,但是如果像上图一样插入新的元素<name = baseURI>,document.baseURI就会返回新插入的元素。这里应该是一个优先级的问题。

不得不说,真的很神奇。之前从来没有注意过。


02



漏洞分析


对于这个漏洞,作者从之前已经被发现的漏洞中进行了一些详尽的分析。首先作者收集下来了大量的真实漏洞,如下图所示。随后,作者将这些漏洞的特征收集下来,并对于19个浏览器进行了测,判断这样的漏洞特征能否在对应浏览器上触发。

主要测试了以下几种特征的tag

  • R1: Name Access Window: 和上文举的例子一样,攻击形如windows.x 或者x的tag

  • R2: DOM Tree Access攻击形如document.x 的tag

  • R3: Form Parent-Child Relationship:通过R1,R2 攻击tag X,随后攻击形如windows.x.y 的tag

  • R4:Nested Window Proxies: 攻击形如x.y的tag

  • R5: HTMLCollection:这个规则提到了浏览器处理DOM中多个元素具有相同id时。当发生这种情况时,浏览器会创建一个HTMLCollection,它是一个类似数组的对象,包含具有相同id的所有元素。这使得可以通过索引来访问这些元素。例如通过x[i] 来访问元素

    作者对于这几种特征做了非常详细的分析,在文中有大量的图表以及介绍。这里就先不过多介绍。


不同浏览器发现的易受攻击API的数量

03

漏洞检测

针对上述的漏洞,作者开发了一个工具:TheThing,使用动静态分析结合来检测DoM attack漏洞

TheThing 框架图

  • Data collection: 通过Puppeteer和Chrome DevTools Protocol (CDP) 爬取URL的脚本等信息

  • Vul Analysis:  使用JAW给client-side 的JavaScript创建图,记录下来例如data-flow,control-flow, event-driven transfer of control 等等。同时标记source-sink tag等。如下图,其余出现在文中附录。

部分sink 


  • Analysis Traversals:随后,通过对于图的遍历,来判断source-sink是否可以连通,找到DOM漏洞

  • Vulnerability Verification:随后对于上述漏洞,TheThing使用轻量的动态分析,利用强制执行等方法进行结果二次过滤


04
漏洞防护

对于DOM attack漏洞,作者也提出了一些防御方案,例如关闭DOM 这种别名特征(可能造成10.5%的网页崩溃),增加HTML过滤等等。


05

总结

最后给出文中的一幅图,介绍了经典的DOM attack的特征

之前从来没有注意过这种特征的出现,后面写代码啥的时候,或许也可以关注一下有没有这种“别名问题”的出现。例如说从homebrew下载包的时候等等,进而研究相应的安全问题。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐