芬兰的专家们扫描了Python软件包索引中的开源软件库,也就是众所周知的PyPI,发现了安全问题,并说他们发现近一半的软件包包含有问题的或潜在的可利用的代码。
来自图尔库大学的Jukka Ruohonen、Kalle Hjerppe和Kalle Rindell在通过ArXiv发布的一篇研究论文中描述了他们如何对通过PyPI提供的大约197,000个Python软件包进行静态分析,并发现了超过749,000个充其量是糟糕的,或者是最糟糕的不安全的编程实例。
"研究人员称:"即使在静态分析的限制下,结果也表明了安全问题的普遍性;大约46%的Python软件包中至少存在一个问题。
在所发现的问题中,大多数(442,373)是低度的。大约227,426个是中度严重性,存在于大约25%的PyPI软件包中。大约80,065个是高严重性问题,存在于大约11%的PyPI软件包中。
在有问题的46%的软件包中,问题的中位数是3个。但有几个软件包的情况比大多数严重得多。
论文说:"在尾巴的最末端,有五个软件包有超过1000个检测到的问题:PyGGI
、appengine-sdk
、genie.libs.ops
、pbcore
、genie.libs.parser
,"。
在这些最严重的犯罪者中,许多被检测到的问题并不特别令人担忧。例如,专家们说,PyGGI
的所有2589个问题都与 "try-except-pass "结构有关,他们认为这可能是一种不可取的模式(一种 "代码气味"),而不是确认的漏洞。
但是,appengine-sdk
,一个谷歌用于其App Engine云服务的Python开发工具包的非官方包,表现出更严重的问题。在检测到的2356个问题中,395个是指通用的已知风险问题,351个与注入有关,500个与潜在的跨站脚本有关,7个涉及潜在的不安全网络协议。
"尽管这些观察结果的部分原因是appengine-sdk
,将大量的第三方库直接嵌入到其代码库中,但仔细观察发现谷歌自己的代码中也有许多有问题和潜在的不安全的编码做法,"该文件说,显然将这个非官方的项目误认为是谷歌维护的项目。
其他这类调查也得出了关于软件包生态系统的类似结论。去年9月,一组IEEE研究人员分析了6673个积极使用的Node.js应用程序,发现大约68%的人至少依赖一个有漏洞的软件包。
就在去年3月,PyPI清除了3653个恶意软件包,因为有人创建了一个名为 "RemindSupplyChainRisks "的账户,显然是为了表明用坏软件包毒害PyPI是多么容易。
Maven(Java)、NuGet(.NET)、RubyGems(Ruby)、CPAN(Perl)和CRAN(R)等软件包注册处的情况也类似。
在一次电话采访中,Python软件基金会的基础设施主任Ee W. Durbin III告诉The Register:"像这样的事情往往不是很令人惊讶。作为一项服务,PyPI最被忽视或误解的部分之一是,它的目的是免费访问、免费提供和免费使用。正因为如此,我们对那里提供的东西不做任何保证。"
库的问题
现代软件往往依赖第三方编写的开源库,而第三方又在其项目中纳入其他库作为依赖。同时,恶意软件创建者已经认识到有多少软件在默认情况下得到了信任--因为没有切实可行的方法来检查几十个软件包和许多级别的依赖关系--并加强了颠覆该系统的努力。
早在2018年,安全厂商SonaType报告说,开源软件供应链的漏洞在过去12个月里加倍。而今天,在SolarWinds和Kaseya供应链攻击等事件发生后,软件开发系统和构建工具的漏洞显然需要更多关注。
杜宾对芬兰研究人员的工作表示欢迎,因为它使人们更加了解开放软件包管理系统中普遍存在的问题,而且它有利于Python社区的整体运转。
"Durbin说:"这不是我们忽视的事情,但也不是我们历来都有资源来处理的事情。
这可能是未来的一个较小的问题。据Durbin说,在过去的一年里,人们对供应链安全以及公司可以做什么来改善这种情况的兴趣明显增加。
对于Python社区来说,这已经转化为创建软件包漏洞报告API和Python咨询数据库的努力,这是一个由社区管理的PyPI安全咨询库,与谷歌领导的开放漏洞数据库相连接。
"Durbin说:"我们对咨询数据库和入站API所提供的机会感到非常兴奋,因为它可以向维护者展示安全问题。
原文链接:About half of Python libraries in PyPI may have security issues, boffins say • The Register