原文标题: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 中的攻击并不相同。
图1-1 HPA 攻击示例
2 论文主要贡献
作者该篇文章主要做出了以下贡献:
提出 hidden property abusing 攻击形式,并且证明其具有安全威胁
设计了一个自动化 HPA 漏洞检测与利用代码编写工具——LYNX
评估并证明了真实场景下的 HPA 问题会导致严重安全影响
3 隐藏属性滥用
图3-1 攻击路径图
上图介绍了一个远程攻击者是如何利用 HPA 完成了攻击。
图3-2 攻击对比
上图对比了两种攻击异同。
4 LYNX 设计
图4-1 LYNX 总览
输入: Node.js 程序
输出: Exploit 文件
识别隐藏属性: 发现属性携带者 --> 定位候选隐藏属性 --> 候选剪枝
生成 HPA 利用代码: 生成利用代码模板 --> 探索攻击结果
4.1 识别隐藏属性
作者依赖于一个发现:有文档的参数通常会被一个调度器(例如 if-else 语句)一同处理。
未使用的参数与使用的参数被同一调度器处理:从 API 参数中记录使用的属性,然后找出与使用的属性位于同一调度器中的隐藏属性候选对象。未使用的参数与使用的参数被不同调度器处理:检查所有的对象并查看是否有被同一调度器处理,如果存在则从结果中移除。
图4-2 完整示例
4.2 生成 HPA 利用代码
漏洞利用模版生成
本文直接利用原始对象作为模版,并在对象中插入属性。
探索攻击路径
作者总结了以下 6 种敏感函数触发点(Sink):
敏感数据库查询方法
敏感文件系统操作方法
代码执行接口
模块引用结果
全局方法或变量
循环条件
图4-3 LYNX 敏感触发点
5 评估实验及分析
5.1 识别阶段
实现在四种更可能接收到输入的程序类别上完成了实验,共收集了 102 个 Node.js 程序,其中 91 个是 Node.js 模块,11 个为 web 程序。实验效果如下:
图5-1 识别实验效果
#PC:属性携带者( property carriers )的数目
#HP:候选隐藏属性( hidden property candidates )的数目
#DA:有文档的参数( detected documented arguments )的数目
5.2 利用攻击阶段
图5-2 利用实验效果
Reported:LYNX 认为是脆弱的敏感点
Exploitable:LYNX 利用并且被手工确认的敏感点
Missed:LYNX 第一阶段检测出但第二阶段未被利用的隐藏属性
5.3 HPA脆弱性影响分析
图5-3 脆弱性检测效果
上图展现了真实场景下的 HPA 攻击,分别破坏了 Node.js 生态系统的保密性( Confidentiality )、完整性( Integrity )、可用性( Availability )。
6 总结与展望
尽管 LYNX 取得了不错的成绩,但是还面临以下局限性。
LYNX 需要外界输入(例如模块测试用例和用户交互等)
同其他动态分析工具相同,存在漏报
并没有涵盖Node.js生态系统中存在的所有输入通道
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系secdr#qq.com
声明:本文来自安全学术圈,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。