随着开源软件的快速发展,软件开发越来越多地使用第三方依赖。开源软件供应链在为开发者提供丰富而灵活功能的同时,也带来了日益广泛的潜在风险。Go 语言凭借简洁高效的特点以及强大的并发能力受到众多开发者的喜爱,其生态发展迅速。为了研究 Go 生态的开源软件供应链情况,复旦大学 CodeWisdom 团队的开源风险治理平台 “伏羲” 对 Go 生态进行了大规模依赖网络解析和组件级漏洞传播影响分析。
图 1:Go 生态千分之一依赖网络概览图
首先,伏羲平台构建了包含 Go 生态 464,612 个库的 7,156,489 个库版本以及 167,393,003 条直接依赖边的依赖网络,依赖网络千分之一概览图如图 1 所示。然后,伏羲平台结合依赖网络和 938 条漏洞数据,对 Go 生态进行了漏洞传播影响分析。最后,伏羲平台发现以下 Go 生态特点:
Go 生态中,大部分库版本都使用了第三方依赖;
Go 生态中,反向依赖集中于较小比例的核心库版本;
Go 生态中,漏洞风险传播范围广泛。
图 2:Go 库版本直接依赖数分布图
“
1. Go 生态中,大部分库版本都使用了第三方依赖。
伏羲平台发现,77.3% 的 Go 库版本使用了第三方依赖。Go 生态库版本直接依赖数分布如图 2 所示,34.1% 的库版本会使用小于 10 个直接依赖,平均每个库版本会使用 30 个直接依赖。第三方库版本的层层依赖构成了传递依赖网络,平均每个库版本会引入 152 个传递依赖。换句话说,当引入一个第三方依赖时,开发者隐含地引入了高达 152 个传递依赖,而这一数字在 NPM 生态中仅为 80[1]。可见,Go 生态的依赖网络更加复杂。
图 3:Go 库版本反向传递依赖数分布图
“
2. Go 生态中,反向依赖集中于较小比例的核心库版本。
伏羲平台发现,大多数库版本依赖于较小比例的核心库版本。Go 生态中仅有 6.5% 的库版本被其它库版本所依赖,而在其它生态中普遍大于 10%[2]。可见,Go 生态依赖网络核心更加集中。图 3 是 Go 库版本反向传递依赖数分布图,反向依赖数大于十的核心库版本仅占 Go 生态所有库版本的 2.2%。库的传递影响数目是评价库重要性的重要指标。Go 生态依赖网络核心的集中性使得核心库的问题可能对众多其它库产生连锁影响,核心库的稳定性和安全性对整个 Go 生态的可靠性至关重要。表 1 是影响范围最广的库列表,其中影响范围最广的库为 golang.org/x/sys,该库被 121K 个其它库直接依赖,被 257K 个其它库传递依赖,即该库会传递影响 Go 生态中超过 55% 的库。
表 1:传递影响范围最广的十个库
“
3. Go 生态中,漏洞风险传播范围广泛。
Go 生态中 69% 的库版本受潜在的漏洞传播影响,而在其它生态如 NPM 中仅有约 25% 的库版本是受漏洞传播影响的[3]。Go 生态漏洞传播广泛和依赖网络核心集中的特点有密切联系,核心库版本的漏洞可以通过复杂的依赖网络对众多库版本造成大范围传递影响。表 2 是影响范围最广的十个漏洞,这些漏洞传递影响了 67% 的库版本。例如,CVE-2022-32149 是关于 golang.org/x/text 的一个漏洞,该漏洞通过依赖网络传递影响了 24 万个库的 450 多个万个库版本。CVE-2021-33194 是关于 golang.org/x/net 的一个漏洞,该漏洞通过依赖网络传递影响了 19 多万个库的 310 多个万个库版本。
表 2:传递影响范围最广的十个漏洞
伏羲平台对 Go 语言生态进行了大规模分析,深入研究了 Go 生态的依赖网络特点和组件级漏洞传播情况,为理解 Go 生态软件供应链提供了宝贵的洞察。伏羲平台接下来会开展 Go 生态的函数级漏洞传播影响分析,持续为开源软件供应链治理做贡献。可以点击文末的“阅读原文”,跳转到开源风险治理平台“伏羲”进行体验和试用,也欢迎提出宝贵的意见和建议!
参考文献
1.Zimmermann M, Staicu CA, Tenny C, Pradel M. Small world with high risks: A study of security threats in the npm ecosystem. In Proceedings of the 28th USENIX Security Symposium, pages 995-1010, 2019.
2.Decan A, Mens T, Grosjean P. An empirical comparison of dependency network evolution in seven software packaging ecosystems. In Empirical Software Engineering, vol. 24, pages 381-416, 2019.
3.Liu C, Chen S, Fan L, Chen B, Liu Y, Peng X. Demystifying the vulnerability propagation and its evolution via dependency trees in the npm ecosystem. In Proceedings of the 44th International Conference on Software Engineering, pages 672-684, 2022.
作者:郭锦、黄凯锋、陈碧欢
编辑:孙婕
审核:陈碧欢
来源:CodeWisdom