内存安全周报第107期 | 基于图形的 JavaScript 程序漏洞扫描器在 Node.js 库中发现了 100 多个零日漏洞
安芯网盾内存安全周报专栏,希望帮助企业更好的理解内存安全相关问题。让用户更好的认识、发现问题,防止外部入侵等威胁、有效的对系统进行安全设计,以实时防御并终止无文件攻击、0day /Nday攻击、缓冲区溢出攻击、基于内存的攻击等。
基于图形的 JavaScript 程序漏洞扫描器在 Node.js 库中发现了 100 多个零日漏洞(8.30)
约翰霍普金斯大学的研究人员开发了一种基于图形的代码分析工具,可以检测JavaScript程序中的各种漏洞。
详细情况
该工具名为 ODGen,在今年的Usenix安全研讨会上发布,并解决了限制使用基于图形的安全工具分析JavaScript程序的一些挑战。
研究人员通过将ODGen应用于数千个Node.js库来证明ODGen的有效性,在那里它发现了180个零日漏洞并收到了70个CVE。
基于图形的方法
基于图形的扫描器解析源代码文件以构建表示应用程序不同属性和执行分支的图形结构。然后,此图可用于建模和查找源代码中的漏洞。
基于图形查询的方法已被证明在检测某些编程语言中的漏洞方面非常有效,特别是一种技术,代码属性图(CPG),已被证明在保护C / C++和PHP代码方面是成功的。
受到图形方法(尤其是 CPG)成功的启发,约翰霍普金斯大学的研究人员试图将它们应用于 JavaScript。虽然有不同的工具可以在JavaScript代码中查找特定漏洞,但基于图形的工具有望提供一个用于检测各种漏洞的通用框架。
“JavaScript,特别是Node.js,如今正在成为一个拥有数百万个软件包的重要社区,”该论文的合著者,约翰霍普金斯大学计算机科学助理教授Yinzhi Cao告诉The Daily Swig。
“与此同时,许多NPM软件包的维护较少,漏洞在NPM生态系统中普遍存在,这就是为什么我们决定进行这项研究,使生态系统成为一个更安全的环境。”
然而,他们的初步发现表明,由于 JavaScript 语言的动态结构,CPG 在 JavaScript 中不是很有效,这使得它在执行之前解析和分析对象关系和程序分支要困难得多。
Cao表示:“CPG不对详细的对象关系进行建模,包括(i)原型链和(ii)对象级数据流。因此,很难应用 CPG 来检测特定于 JavaScript 的漏洞,例如原型污染和内部属性篡改。而且很难在CPG中对细粒度的对象级数据流进行建模。”
对象依赖关系图
在他们的论文中,研究人员提出了对象依赖图(ODG)作为从JavaScript代码构建图形的新方法。ODG 使用 CPG 的一些组件,例如抽象语法树 (AST),并添加了特定于 JavaScript 的功能,包括对象之间的细粒度数据依赖关系。因此,研究人员创建了ODGen,这是一种用于创建和查询ODG的工具。
“我们提出的ODGen抽象地解释JavaScript代码并生成所谓的对象依赖图来捕获包括对象关系在内的动态特征,以便基于图形查询的方法可以轻松获取此类信息并检测漏洞,”Cao说。
研究人员设计了ODGen来检测应用程序和软件包级别的漏洞。他们针对330个记录在案的漏洞对该工具进行了测试,这些漏洞跨越了16个类别,包括跨站点脚本(XSS)、服务器端和客户端请求伪造 (SSRF/CSRF)、 SQL 注入、原型污染和命令注入。
该工具能够以非常高的准确度检测13种类型的漏洞,发现了330个漏洞中的302个漏洞。
他们通过抓取300000个NPM包并应用ODGen和图形查询来检测查询,从而扩展了他们的测试。ODGen报告了近3000个安全漏洞,研究人员验证了其中的264个,它们存在于每周下载量超过1000次的库中。他们能够确认并报告180个安全漏洞,其中许多漏洞存在于Web应用程序中广泛使用的库中。在发现的漏洞中,有70个被分配了CVE。
ODGen展示了需要做多少工作来保护开源JavaScript生态系统,以及现有工具的调整如何有助于开发整体方法来增强Node.js 库的安全性。
Cao说,在未来,该团队可能会将ODGen扩展到Web应用程序中使用的其他编程语言,包括PHP和Java。
参考链接