滥用隐藏属性来攻击 Node.js 生态系统

渗透技巧 2年前 (2022) admin
548 0 0

滥用隐藏属性来攻击 Node.js 生态系统


原文标题: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 中的攻击并不相同。

滥用隐藏属性来攻击 Node.js 生态系统
图1-1 HPA 攻击示例

2 论文主要贡献

作者该篇文章主要做出了以下贡献:

  • 提出 hidden property abusing 攻击形式,并且证明其具有安全威胁
  • 设计了一个自动化 HPA 漏洞检测与利用代码编写工具——LYNX
  • 评估并证明了真实场景下的 HPA 问题会导致严重安全影响

3 隐藏属性滥用

滥用隐藏属性来攻击 Node.js 生态系统
图3-1 攻击路径图

上图介绍了一个远程攻击者是如何利用 HPA 完成了攻击。

滥用隐藏属性来攻击 Node.js 生态系统
图3-2 攻击对比

上图对比了两种攻击异同。

4 LYNX 设计

滥用隐藏属性来攻击 Node.js 生态系统
图4-1 LYNX 总览

输入: Node.js 程序

输出: Exploit 文件

识别隐藏属性: 发现属性携带者 –> 定位候选隐藏属性 –> 候选剪枝

生成 HPA 利用代码: 生成利用代码模板 –> 探索攻击结果

4.1 识别隐藏属性

作者依赖于一个发现:有文档的参数通常会被一个调度器(例如 if-else 语句)一同处理。

未使用的参数与使用的参数被同一调度器处理:从 API 参数中记录使用的属性,然后找出与使用的属性位于同一调度器中的隐藏属性候选对象。未使用的参数与使用的参数被不同调度器处理:检查所有的对象并查看是否有被同一调度器处理,如果存在则从结果中移除。

滥用隐藏属性来攻击 Node.js 生态系统
图4-2 完整示例

4.2 生成 HPA 利用代码

漏洞利用模版生成

本文直接利用原始对象作为模版,并在对象中插入属性。

探索攻击路径

作者总结了以下 6 种敏感函数触发点(Sink):

  1. 敏感数据库查询方法
  2. 敏感文件系统操作方法
  3. 代码执行接口
  4. 模块引用结果
  5. 全局方法或变量
  6. 循环条件
滥用隐藏属性来攻击 Node.js 生态系统
图4-3 LYNX 敏感触发点

5 评估实验及分析

5.1 识别阶段

实现在四种更可能接收到输入的程序类别上完成了实验,共收集了 102 个 Node.js 程序,其中 91 个是 Node.js 模块,11 个为 web 程序。实验效果如下:

滥用隐藏属性来攻击 Node.js 生态系统
图5-1 识别实验效果
  • #PC:属性携带者( property carriers )的数目
  • #HP:候选隐藏属性( hidden property candidates )的数目
  • #DA:有文档的参数( detected documented arguments )的数目

5.2 利用攻击阶段

滥用隐藏属性来攻击 Node.js 生态系统
图5-2 利用实验效果
  • Reported:LYNX 认为是脆弱的敏感点
  • Exploitable:LYNX 利用并且被手工确认的敏感点
  • Missed:LYNX 第一阶段检测出但第二阶段未被利用的隐藏属性

5.3 HPA脆弱性影响分析

滥用隐藏属性来攻击 Node.js 生态系统
图5-3 脆弱性检测效果

上图展现了真实场景下的 HPA 攻击,分别破坏了 Node.js 生态系统的保密性( Confidentiality )、完整性( Integrity )、可用性( Availability )。

6 总结与展望

尽管 LYNX 取得了不错的成绩,但是还面临以下局限性。

  • LYNX 需要外界输入(例如模块测试用例和用户交互等)
  • 同其他动态分析工具相同,存在漏报
  • 并没有涵盖Node.js生态系统中存在的所有输入通道
安全学术圈招募队友-ing 
有兴趣加入学术圈的请联系 secdr#qq.com

滥用隐藏属性来攻击 Node.js 生态系统


原文始发于微信公众号(安全学术圈):滥用隐藏属性来攻击 Node.js 生态系统

版权声明:admin 发表于 2022年6月7日 上午8:31。
转载请注明:滥用隐藏属性来攻击 Node.js 生态系统 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...