Python 隐藏漏洞通过超 14.5 万个软件包传播

新泽西理工学院的一项研究揭露了Python软件包生态系统中潜藏的大规模安全隐患。这项名为"PyPitfall"的研究报告揭示,复杂且深度嵌套的软件包依赖关系正在数千个项目中无声传播已知安全漏洞。

"一个软件包中的漏洞可能通过其依赖关系传播,最终影响下游软件包和应用程序,"研究人员警告称。

漏洞传播规模惊人

Python作为最流行编程语言的地位,很大程度上得益于PyPI(Python Package Index)托管的海量开源库生态系统。目前PyPI拥有超过62.7万个软件包和600多万个版本,开发者往往在引入功能时并未意识到随之而来的安全隐患。

PyPitfall研究分析了378,573个软件包的依赖关系,发现:

4,655个软件包明确要求安装已知存在漏洞的版本(必然暴露)141,044个软件包允许安装可能包含漏洞的版本(潜在暴露)研究团队在定义"必然暴露"时指出:"成功安装这些软件包将不可避免地导致漏洞版本被安装。"依赖关系迷宫加剧风险

研究凸显了PyPI生态系统的极端复杂性,包括存在超过20层传递依赖的软件包,以及100多万个循环依赖。典型案例是square-0-5软件包,经过75次递归跳转后竟然依赖于自身,导致pip install命令陷入无限循环。

"依赖链可能极其漫长复杂,单个软件包可能依赖数百个其他组件,形成深不可测的软件供应链迷宫。"

这种深度嵌套的关系往往掩盖了漏洞组件的存在,使其在广泛传播的同时保持隐蔽。

检测方法与关键发现

研究团队使用Johnnydep工具对PyPI软件包进行模拟安装,在不实际安装的情况下收集依赖树数据。随后将其与67个精选CVE漏洞数据库进行交叉比对,仅关注影响PyPI托管库的漏洞。

这种方法帮助他们在urllib3等广泛使用的软件包中发现严重漏洞——仅该组件就占所有"必然暴露"案例的41.4%。作为Python HTTP栈的核心组件和requests库的依赖项,urllib3的漏洞影响尤为突出:

出现在407,333条依赖链中引入包括CVE-2024-37891和CVE-2023-43804在内的漏洞导致1,926个软件包存在必然暴露风险核心数据与改进建议关键数据:漏洞暴露平均深度:必然暴露4.1层,潜在暴露6.2层Setuptools是被依赖最多的软件包,出现在超700万条依赖链中检测到1,075,559个循环依赖关系许多软件包未遵循PEP 440版本规范,导致解析问题

改进建议:

开发能在安装前审计依赖关系的工具提升开发过程中对传递性漏洞的认知后续研究应采用更全面的CVE数据集扫描PyPI

研究团队已向Python打包管理局披露发现,强调解决Python开源生态系统这一系统性风险的紧迫性。报告总结称:"我们的发现凸显了提升Python软件供应链安全意识的必要性。"

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器