原文标题: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
笔记作者:NING@SecQuan
笔记小编:cherry@SecQuan
1 背景介绍
现如今,由于跨平台特性和高性能的JavaScript执行等特点,Node.js被广泛的应用在服务端和桌面应用程序当中。而在过去几年当中,用的更多的动态脚本语言(PHP、Ruby等)已经被发现在共享对象时是不安全的,然而Node.js并未很好的规避该安全风险。
作者首次引入了对象共享与客户端服务器通信之间的问题。同时作者确认 CWE-915 也同样存在于 JavaScript 与 Node.js 中。为了证明该安全问题,作者引入了一种先进的攻击手段:HPA 攻击,并在进一步的研究中发现这种攻击与现有的 PHP 和 Ruby 中的攻击并不相同。
2 论文主要贡献
作者该篇文章主要做出了以下贡献:
-
提出 hidden property abusing 攻击形式,并且证明其具有安全威胁 -
设计了一个自动化 HPA 漏洞检测与利用代码编写工具——LYNX -
评估并证明了真实场景下的 HPA 问题会导致严重安全影响
3 隐藏属性滥用
上图介绍了一个远程攻击者是如何利用 HPA 完成了攻击。
上图对比了两种攻击异同。
4 LYNX 设计
输入: Node.js 程序
输出: Exploit 文件
识别隐藏属性: 发现属性携带者 –> 定位候选隐藏属性 –> 候选剪枝
生成 HPA 利用代码: 生成利用代码模板 –> 探索攻击结果
4.1 识别隐藏属性
作者依赖于一个发现:有文档的参数通常会被一个调度器(例如 if-else 语句)一同处理。
未使用的参数与使用的参数被同一调度器处理:从 API 参数中记录使用的属性,然后找出与使用的属性位于同一调度器中的隐藏属性候选对象。未使用的参数与使用的参数被不同调度器处理:检查所有的对象并查看是否有被同一调度器处理,如果存在则从结果中移除。
4.2 生成 HPA 利用代码
漏洞利用模版生成
本文直接利用原始对象作为模版,并在对象中插入属性。
探索攻击路径
作者总结了以下 6 种敏感函数触发点(Sink):
-
敏感数据库查询方法 -
敏感文件系统操作方法 -
代码执行接口 -
模块引用结果 -
全局方法或变量 -
循环条件
5 评估实验及分析
5.1 识别阶段
实现在四种更可能接收到输入的程序类别上完成了实验,共收集了 102 个 Node.js 程序,其中 91 个是 Node.js 模块,11 个为 web 程序。实验效果如下:
-
#PC:属性携带者( property carriers )的数目 -
#HP:候选隐藏属性( hidden property candidates )的数目 -
#DA:有文档的参数( detected documented arguments )的数目
5.2 利用攻击阶段
-
Reported:LYNX 认为是脆弱的敏感点 -
Exploitable:LYNX 利用并且被手工确认的敏感点 -
Missed:LYNX 第一阶段检测出但第二阶段未被利用的隐藏属性
5.3 HPA脆弱性影响分析
上图展现了真实场景下的 HPA 攻击,分别破坏了 Node.js 生态系统的保密性( Confidentiality )、完整性( Integrity )、可用性( Availability )。
6 总结与展望
尽管 LYNX 取得了不错的成绩,但是还面临以下局限性。
-
LYNX 需要外界输入(例如模块测试用例和用户交互等) -
同其他动态分析工具相同,存在漏报 -
并没有涵盖Node.js生态系统中存在的所有输入通道
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com
原文始发于微信公众号(安全学术圈):滥用隐藏属性来攻击 Node.js 生态系统