原文标题:Abusing Hidden Properties to Attack the Node.js Ecosystem
原文作者:Feng Xiao, Jianwei Huang, Yichang Xiong, Guangliang Yang, Hong Hu, Guofei Gu, Wenke Lee.
原文链接:https://www.usenix.org/system/files/sec21fall-xiao.pdf
原文来源:USENIX Security'21
笔记作者:[email protected]
笔记小编:[email protected]
现如今,由于跨平台特性和高性能的JavaScript执行等特点,Node.js被广泛的应用在服务端和桌面应用程序当中。而在过去几年当中,用的更多的动态脚本语言(PHP、Ruby等)已经被发现在共享对象时是不安全的,然而Node.js并未很好的规避该安全风险。
作者首次引入了对象共享与客户端服务器通信之间的问题。同时作者确认 CWE-915 也同样存在于 JavaScript 与 Node.js 中。为了证明该安全问题,作者引入了一种先进的攻击手段:HPA 攻击,并在进一步的研究中发现这种攻击与现有的 PHP 和 Ruby 中的攻击并不相同。
作者该篇文章主要做出了以下贡献:
上图介绍了一个远程攻击者是如何利用 HPA 完成了攻击。
上图对比了两种攻击异同。
输入: Node.js 程序
输出: Exploit 文件
识别隐藏属性: 发现属性携带者 --> 定位候选隐藏属性 --> 候选剪枝
生成 HPA 利用代码: 生成利用代码模板 --> 探索攻击结果
作者依赖于一个发现:有文档的参数通常会被一个调度器(例如 if-else 语句)一同处理。
未使用的参数与使用的参数被同一调度器处理:从 API 参数中记录使用的属性,然后找出与使用的属性位于同一调度器中的隐藏属性候选对象。未使用的参数与使用的参数被不同调度器处理:检查所有的对象并查看是否有被同一调度器处理,如果存在则从结果中移除。
漏洞利用模版生成
本文直接利用原始对象作为模版,并在对象中插入属性。
探索攻击路径
作者总结了以下 6 种敏感函数触发点(Sink):
实现在四种更可能接收到输入的程序类别上完成了实验,共收集了 102 个 Node.js 程序,其中 91 个是 Node.js 模块,11 个为 web 程序。实验效果如下:
上图展现了真实场景下的 HPA 攻击,分别破坏了 Node.js 生态系统的保密性( Confidentiality )、完整性( Integrity )、可用性( Availability )。
尽管 LYNX 取得了不错的成绩,但是还面临以下局限性。
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com