深度洞察 |关于JavaScript开源生态中安全漏洞的研究
深度洞察 |关于JavaScript开源生态中安全漏洞的研究
NPMNpm模块安装机制如何?
官方的一些漏洞修复工具: npm audit 和 Dependabot
[1] PLUMBER: Boosting the Propagation of Vulnerability Fixes in the npm Ecosystem 2023 TSE
论文详解:https://linli1724647576.github.io/2023/03/04/PLUMBER/
Keyinsight:文章解决的主要问题是npm生态系统中漏洞修复传播的延迟。尽管60.6%的包在发现漏洞后及时发布了修复版本,工具如npm audit
和Dependabot
被推出以提醒依赖于有漏洞包版本的项目,但在漏洞修复在npm生态系统中的传播仍然存在严重滞后。通过调查,发现20%的活跃npm包通过依赖关系引入了漏洞,尽管涉及的有漏洞包已经发布了修复版本超过一年。
keyinsight: 1、识别阻塞包以及总结了一些修复模式 (生态系统端的检测和修复)
[2] Demystifying the vulnerability propagation and its evolution via dependency trees in the npm ecosystem 2022 ICSE
slides : https://linli1724647576.github.io/asserts/npm-vulnerability-study.pdf
keyinsight: 1、考虑NPM特殊的安装机制 2、考虑时间维度 3、也有考虑DTReme修复 (客户端:侧重检测)
[3] What the Fork Finding Hidden Code Clones in npm 2022 ICSE
论文详解: https://linli1724647576.github.io/2023/04/11/What-the-Fork-Finding-Hidden-Code-Clones-in-npm/
这篇论文主要识别npm生态系统中的克隆包,由于npm生态系统的开放性,任何人都可以fork一个新的包作为原始包的分叉,所以导致了克隆包的出现,更有甚者,npm允许自动升级依赖包,这更加重了克隆包的安全隐患。
为什么npm生态系统中会存在克隆包?其他包管理器如Maven, pip, NuGet也有这种情况吗?
npm生态系统中存在克隆包的原因主要包括缺乏官方的分叉(forking)机制和npm生态系统的开放性和灵活性。在npm中,任何人都可以轻松地复制一个包并将其作为一个新的包发布,而没有明确的机制来标记这种行为或将新包与原始包明确关联。这导致了“shrinkwrapped clones”的出现,即包含与现有包相同或几乎相同代码的包。而Maven, pip, NuGet等其他包管理器虽然也可能出现克隆包的情况,但由于它们的社区规范、依赖管理机制和使用场景的不同,出现这种情况的频率和背景可能有所不同。例如,GitHub等平台对于软件的分叉有明确的可视化和跟踪机制,这在一定程度上减少了克隆包的潜在风险。
出现克隆包会存在哪些安全隐患?这和npm特殊的依赖管理机制有关系吗?
克隆包的存在可能导致多种安全隐患,包括但不限于:
- 误导用户:开发者可能无意中依赖了一个克隆包,而不是他们原本打算使用的原始包。这可能因为克隆包包含恶意代码而导致安全漏洞。
- 潜在的恶意代码:克隆包可能被用作传播恶意代码的载体,包括钓鱼、数据窃取、远程控制等。
- 依赖混乱:克隆包可能引起项目依赖的混乱,特别是当克隆包和原始包在功能上略有差异,但足以引起运行时错误时。
这些安全隐患与npm的依赖管理机制密切相关。npm的灵活性允许包以多种版本并存,缺乏有效的机制来阻止或警告克隆包的存在。此外,npm允许自动升级依赖包,如果自动升级选择了一个有安全问题的克隆包,可能会无意中引入安全漏洞。
这篇论文的Key insight是什么?解决了什么问题?是怎么解决这个问题的?
Key Insight:
- 文章的关键洞察是识别并解决了npm生态系统中隐藏的代码克隆问题,特别是“shrinkwrapped clones”,这些克隆包可能引入安全漏洞并对依赖管理造成混乱。
解决的问题:
- 解决了如何在大规模的npm生态系统中有效地识别和匹配克隆包的问题,包括完全相同的克隆和接近的克隆。这对于提高包的安全性、合规性和整体健康至关重要。
解决方法:
- 文章提出了一种名为“unwrapper”的技术,该技术通过分析包的文件结构和内容,自动检测和匹配克隆包。它包括了一个软件包爬虫、一个预过滤器和一个克隆探测器,这三个模块共同工作以高效地识别克隆包。特别是,通过使用可参数化的启发式方法和基于文件哈希值的比较,这个方法可以在不需要复杂代码分析的情况下,快速地对整个npm仓库进行克隆检测。
[4] Flexible and optimal dependency management via max-smt
论文详解:https://linli1724647576.github.io/2023/04/03/Flexible-and-Optimal-Dependency-Management-via-Max-SMT/
综合了用户体验,其中优化目标和约束的选择决定了哪些目标被优先考虑。论文提出了提出了MAXNPM:一个完整的、可以直接替代NPM的系统,它赋予开发者结合多个目标的能力。核心是使用DSL(领域特定语言),用于指定包版本、版本约束、优化目标等的语法和语义。在底层,PACSOLVE使用一个辅助解决器的语言产生一个为Max-SMT解决器准备的问题,这确保其解决方案是最优的,不同于NPM的贪心方法。