Python曝出15年“老洞”,数十万开源项目受影响

近日,Trellix高级研究中心在Python的tarfile模块中发现一个存在长达15年之久的漏洞(CVE-2007-4559),全球数十万个开源和闭源项目受漏洞影响。研究人员警告说,这无意中产生了一个规模超大的软件供应链攻击面,大多数受影响的组织甚至都不知道。

据Trellix分析师透露,该漏洞是Python tarfile模块中的一个与路径遍历相关的漏洞,被跟踪为CVE-2007-4559,目前有超过35万个开源存储库存在该尚未修补的漏洞,使得软件应用程序非常容易被利用。

在9月21日发布的博客文章中,Trellix首席工程师兼漏洞研究主管Douglas McKee表示,有问题的代码库存在于多个行业的软件中——主要是软件开发、人工智能/机器学习和代码开发,也包括网络安全、IT管理和媒体等不同领域。

研究人员指出,Python tarfile模块是任何使用Python的开发项目的默认模块,目前广泛存在于AWS、Facebook、Google、Intel和Netflix创建的框架中,以及用于机器学习、自动化和Docker容器化的应用程序中。

该漏洞允许攻击者将文件提取到指定目录之外,同时攻击者也可以利用该漏洞执行恶意代码。

“今天,这个漏洞已被无意中添加到全球数十万个开源和闭源项目中,造成了巨大的软件供应链攻击面。”McKee说道。

旧漏洞,新问题

McKee在帖子中写道,最近一次企业设备的路径遍历漏洞检查中发现Python tarfile模块表现异常,Trellix研究人员认为他们偶然发现了一个新的零日Python漏洞。然而,随着调查的深入他们很快意识到这个漏洞“年份久远”。

通过对GitHub的进一步挖掘,研究者发现在大约58.8万个存储库中,大约有287万个包含Python tarfile模块的开源文件。Trellix的分析结果发现,这些实例中约有61%易受攻击,研究人员据此估算有35万个易受攻击的Python存储库。

开源安全无人担责

该漏洞能够逃避检查,在整个软件供应链中传播这么长时间的原因有很多。但McKee认为,将具体责任归咎于Python项目的维护者或任何使用该平台的开发人员是不公平的。

“尽管问题已经暴露,但我们首先要明确一点,漏洞CVE-2007-4559的问题不应该归咎于任何一方、组织或个人。”McKee写道。

由于像Python这样的开源项目是由一群志愿者而不是一个组织运行和维护的,因此更难及时跟踪和修复已知问题。

此外,“很多时候,安全使用库或软件开发工具包的API被看作是开发人员的责任。”McKee指出。

事实上,Python在Tarfile函数文档中明确警告开发人员注意目录遍历风险,不要“在没有事先检查的情况下从不受信任的源中提取档案”。但是,显然该警告并未阻止漏洞的持续存在和蔓延。

McKee补充说,加剧这个问题的原因是,大多数为开发人员提供的关于如何使用平台模块的Python教程——包括Python自己的文档和流行的网站,如tutorialspoint、geeksforgeeks和askpython.com——并未清楚指出如何避免不安全地使用tarfile模块。

McKee指出,这种差异使得漏洞被写入整个供应链中,这种趋势可能会持续数年,除非对该问题有更广泛的认识。

漏洞利用“非常容易”

从技术层面分析,CVE-2007-4559是Python tarfile模块中的路径遍历攻击,它允许攻击者通过在TAR存档中的文件名中添加“..”序列来覆盖任意文件。

Trellix漏洞研究人员Charles McFarland在周三发表的一篇博文中指出,实际的漏洞来自使用未经处理的tarfile.extract()或tarfile.extractall()的内置默认值的两三行代码。

“未能在调用tarfile.extract()或tarfile.extractall()之前编写任何安全代码来清理成员的文件会导致目录遍历漏洞,从而使不良行为者能够访问文件系统。”他写道。

攻击者要利用此漏洞,需要在文件名中添加操作系统分隔符(“/”或“\”)和“..”,将文件提取到预定目录以外,而Python的tarfile模块让开发人员能够做到这一点。

Trellix漏洞研究实习生Kasimir Schulz在周三发表的博客文章中详细描述了利用该漏洞是多么“难以置信的容易”。(https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/tarfile-exploiting-the-world.html

Schulz在他的文章中解释说,Python中的Tarfile包含多个不同文件和元数据的集合,这些文件和元数据后来用于解压缩Tarfile本身。TAR存档中包含的元数据包括但不限于文件名、文件大小和校验和等信息,以及文件存档时文件所有者的信息。

“tarfile模块允许用户在文件添加到TAR存档之前添加一个过滤器,该过滤器可用于解析和修改文件的元数据,”Schulz写道:这使攻击者能够用短短六行代码创建他们的漏洞利用。

Schulz在他的帖子中详细解释了他如何使用该漏洞和一个名为Creosote的定制脚本(该脚本在目录中搜索并分析Python文件)在Spyder IDE中执行恶意代码,后者一个免费和开源的为Python编写的科学开发环境,可以在Windows和macOS上运行。

下一个目标:软件供应链

Tarfile的漏洞再次凸显了软件供应链作为一个攻击面存在的严重问题,因为攻击者可以通过攻击广泛存在于多个平台和企业环境中的有缺陷代码来实施大规模恶意攻击活动。

类似的软件供应链攻击已经有很多案例,例如震惊全球的SolarWinds和Log4j漏洞攻击。后者是2021年12月上旬披露的在广泛使用的Java日志工具中的一个名为Log4Shell的漏洞,该漏洞引发了多次利用,并使数百万应用程序容易受到攻击,其中许多应用程序至今仍未修补。

最近,攻击者已经开始直接在开源代码存储库注入恶意代码并尝到甜头。这些“毒化”代码可被利用来进行供应链攻击。事实上,Python项目此前已经遭受过类似攻击。

今年8月下旬,攻击者针对Python包索引(PyPI)的用户进行了首次网络钓鱼攻击,试图窃取用户的凭据,以便将恶意包加载到存储库中。当月早些时候,在一家安全供应商警告攻击者将恶意代码嵌入包安装脚本后,PyPI从项目库中删除了10个恶意代码包。

前一篇海云安出席深圳市网络安全宣传周电信日活动暨第三届“网络安全圳先行”高峰论坛
后一篇火爆全网的人工智能绘画工具抓取私人病例照片