Python开源编程语言中一个15年前的漏洞在许多地方仍未修补,因此得以蔓延到全球成千上万个开源和闭源项目。研究人员警告,这无意中构成了一条大范围易受攻击的软件供应链,大多数受影响的组织还蒙在鼓里。
Trellix高级研究中心的分析师发现,一个与路径遍历相关的漏洞被编号为CVE-2007-4559,目前在350000多个独特的开源代码存储库中仍未修补,导致应用软件容易被利用。
首席工程师兼漏洞研究主管Douglas McKee在9月21日发表的博文中表示,这个有问题的代码库存在于遍布众多行业的软件中,主要是软件开发、人工智能/机器学习和代码开发等领域,还包括安全、IT管理和媒体等诸多领域。
研究人员表示,Python tarfile模块还存在于任何使用Python的项目的一个默认模块中,目前广泛出现在AWS、Facebook、谷歌、英特尔和Netflix开发的框架中,以及用于机器学习、自动化和Docker容器化的应用程序中。
研究人员表示,虽然该漏洞让攻击者可以逃离目录(文件应该被解压到该目录),但攻击者也可以利用该漏洞执行恶意代码。
McKee说:“今天,这个未加制止的漏洞被无意中添加到全球成千上万开源和闭源项目中,留下了巨大的软件供应链攻击面。”
新问题,旧漏洞
McKee在博文中写道,Trellix的研究人员最近发现Python的tarfile模块没有合理检查企业设备中的路径遍历漏洞后,以为无意中发现了一个新的Python零日漏洞。不过他们很快就意识到,这个漏洞是之前就已发现的。
进一步深挖及后来得到GitHub的合作后发现,大约287万个开源文件含有Python的tarfile模块,该模块出现在大约588000个独特的代码存储库中。Trellix分析后发现,这些实例中约61%易受攻击,研究人员凭此估计目前有350000个易受攻击的Python代码存储库。
在开源界,找不到可以责怪的对象
该漏洞在整个软件界蔓延这么久、却未加制止有诸多原因;然而McKee特别指出,将具体责任归咎于Python项目、该项目的众多维护者或任何使用该平台的开发人员有失公允。
他写道:“首先应明确一点,造成CVE-2007-4559目前的这种状态,不该归咎于任何一方、组织或个人,但无论如何我们都有责任。”
McKee表示,由于Python之类的开源项目由一群志愿者而不是一个联合组织(以及非营利基金会)运行和维护,因此更难及时跟踪和修复已知的问题。此外,库或软件开发工具包……将安全地使用API视为开发人员的一部分责任并不少见。
的确,Python在tarfile函数的文档中就使用它的风险发出了警告,明确告诫开发人员:由于目录遍历问题,永远不要“在没有事先检查的情况下解压来源不明的存档”。
McKee表示,虽然警告是迈出的“积极一步”,提醒人们注意该问题,但显然没有阻止漏洞持续存在,因为仍需要由使用该代码库的开发人员确保自己构建的软件是安全的。
他补充道,使问题更严重的是,大多数为开发人员提供的关于如何使用该平台模块的Python教程并没有清楚地表明如何避免tarfile 模块的不安全使用,包括Python自己的文档以及utorialspoint、geeksforgeeks和askpython.com等流行网站。
McKee特别指出,这种差异使得该漏洞被编写到整条供应链中,这个趋势可能会延续数年,除非对这个问题有更广泛的认识。
利用漏洞“异常容易”
在技术方面,CVE-2007-4559是Python的tarfile模块中的路径遍历攻击,它让攻击者可以通过为TAR存档的文件名添加“..”序列来覆盖任意文件。
Trellix漏洞研究人员Charles McFarland在周三发表的关于该问题的另一篇博文中特别指出,这个实际漏洞源自使用未净化处理的tarfile.extract()或tarfile.extractall()的内置默认值的两三行代码。
他写道:“未编写在调用tarfile.extract()或tarfile.extractall()之前净化处理成员文件的任何安全代码导致了目录遍历漏洞,从而使不法分子能够访问文件系统。”
攻击者要利用该漏洞,就需要为文件名添加带有操作系统分隔符(“/”或“\”)的“..”,以逃离目录(文件本该被解压到该目录)。Python的tarfile模块让开发人员恰好可以做到这点。
这个广泛的Python tarfile漏洞浮出水面,实际上得益于Trellix漏洞研究实习生Kasimir Schulz对另一个问题开展的研究。周三他发表了第三篇独立的Trellix博文,详细描述了利用CVE-2007-4559多么“异常容易”。
Schulz在博文中解释,Python中的Tarfile包含多个不同的文件和元数据,元数据后来用于解压缩tarfile本身。TAR存档文件中包含的元数据包括但不限于文件名、文件大小和校验和之类的信息以及文件存档时有关文件所有者的信息。
Schulz写道:“tarfile模块让用户可以添加过滤器,过滤器可用于在文件的元数据添加到TAR存档之前解析和修改该元数据。”这使攻击者能够用短短六行代码即可创建漏洞利用工具。
Schulz在博文中继续详细解释了他如何使用该漏洞和一个名为Creosote的定制脚本(该脚本可搜遍目录,扫描并分析Python文件),在Spyder IDE中执行恶意代码。Spyder是一个免费的开源科学环境,为Python编写,可以在Windows和macOS上运行
聚焦供应链
tarfile问题再次凸显了软件供应链这一攻击面。由于攻击者可以通过攻击存在于多个平台和企业环境中的有缺陷代码造成广泛影响,这个攻击面近年来越来越惹人瞩目。这可用于大大扩大恶意活动的影响,无需威胁分子多花力气。
供应链遭到这些类型的攻击此前已有很多例子,如今臭名昭著的SolarWinds和Log4J场景就最为知名。前者始于2020年12月下旬,SolarWinds Orion软件遭到破坏,这一事件蔓延到次年,众多组织遭到多起攻击。后一起事件始于2021年12月上旬,在广泛使用的Java日志工具中发现了一个名为Log4Shell的漏洞,该漏洞引发了另外多个漏洞,导致数百万应用程序易受攻击,其中许多应用程序至今仍未修补。
最近,攻击者已经开始尝到直接攻击开源代码存储库以植入他们自己的恶意代码带来的甜头,这些代码可以在以后被用来攻击供应链。事实上,Python项目已经发现自己被盯上了。
8月底,攻击者针对Python包索引(PyPI)的用户发动了首起网络钓鱼攻击,旨在窃取用户的凭据,那样威胁分子就可以将中招的软件包加载到代码存储库中。8月早些时候,在一家安全供应商警告威胁分子将恶意代码嵌入到软件包安装脚本后,PyPI已经从注册库删除了10 个恶意代码包。
本文翻译自:https://www.darkreading.com/application-security/15-year-old-python-flaw-software-worldwide如若转载,请注明原文地址。