本文主要介绍Scantist科研团队近期在软件工程顶会International Conference on Software Engineering(CSE)2022中接收的一篇关于 JavaScript包管理器NPM生态中软件安全漏洞的传播及其演变分析的工作《Demystifying the Vulnerability Propagation and Its Evolution via Dependency Trees in the NPM Ecosystem》。
此工作基于Scantist独家的开源生态数据做了一个系统化安全分析,希望给开源社区的安全治理提供更多的见解和思路。
一、研究背景及动机
随着第三方组件在软件开发过程中的广泛使用,如何妥善管理第三方组件中引入的安全漏洞所带来的安全风险,尤其在2021年12月log4j RCE漏洞和2022年3月Spring框架远程命令执行漏洞事件爆发之后,成为DevSecOps过程中广受关注的问题之一。其中,关于安全漏洞的影响传播,特别是在如NPM这种大规模使用第三方组件的软件生态中,显得尤为重要。
在已有的相关工作中,研究人员主要通过两种方式分析依赖中存在的安全漏洞对用户项目的影响。
- 通过直接依赖关系反向追踪含有漏洞组件的下游用户
- 基于依赖关系进行间接依赖的可达性分析
然而,这两种依赖关系均忽视了NPM生态中软件包安装过程中上下文环境对依赖版本选择的影响,从而无法精准地得到安全漏洞在生态中真实的影响范围。
如下图所示,直接以间接依赖的可达性分析,则存在A@1.0.0->C@1.0.0->D@1.2.0->E@1.0.0的间接依赖链 ,如图(b)。
而根据NPM的依赖解析规则,由于A@1.0.0的直接依赖中已经解析并选择了D@1.0.0,而D@1.0.0亦满足C@1.0.0->D的依赖约束范围,此时应直接选择已有的D@1.1.0而不是重新安装D@1.2.0从而引入含有漏洞的E@1.0.0.
二、研究方法
基于此,本文旨在提出一种轻量且能够对安全漏洞影响尽可能准确分析的方法,对NPM生态中存在的安全漏洞进行经验研究。
如上图所示,我们首先设计并实现一整套