安全公司 Trellix 的研究人员 Kasimir Schulz 发现了一个很容易被开发人员忽略的路径遍历(path traversal)漏洞,使得攻击者能够访问文件系统。经过进一步分析后,他发现这是一个早在 2007 年就已经披露过的 Python tarfile 包中的漏洞 CVE-2007-4559;产生于使用未经处理的 tarfile.extract() 函数或 tarfile.extractall() 的内置默认值的代码中。
该漏洞已有 15 年的历史,自 2007 年 8 月首次报告以来,其相关的技术细节也一直存在可用。但目前却从未收到过任何补丁,唯一提供的缓解措施是警告开发人员有关风险的文档更新。官方 Python 文档明确警告称“切勿在未经事先检查的情况下从不受信任的来源提取档案”。BleepingComputer 指出,虽然没有关于该漏洞被用于攻击的报告,但它仍代表了软件供应链中的一个风险。
Trellix 研究人员指出,该漏洞已存在于成千上万的开源/闭源项目中。他们抓取了一组 257 个更有可能包含易受攻击代码的存储库,并手动检查了其中的 175 个以查看它们是否受到影响。结果表明,其中 61% 的项目存在漏洞;在对其余的存储库进行自动检查后,受影响的项目数量增加到了 65%,表明了问题的普遍存在性。
然而,这个小样本集仅作为估算 GitHub 上所有受影响的存储库的基准。“在 GitHub 的帮助下,我们能够得到一个更大的数据集,包括 588,840 个在其 Python代码中包含'import tarfile'的独特仓库”。
基于手动验证的 61% 的漏洞率,Trellix 估计有超过 35 万个易受攻击的存储库,其中许多被用于帮助开发人员提升效率的机器学习工具(如 GitHub Copilot)使用。这种自动化工具依赖于来自数十万个存储库的代码来提供“auto-complete”选项。如果他们提供不安全的代码,问题就会在开发人员不知情的情况下传播到其他项目。
易受 CVE-2007-4559 攻击的开源代码“跨越了众多行业”。其中,受影响最大的是开发部门,其次是网络和机器学习技术。
Trellix 方面为 11,005 个存储库提供了补丁程序:在受影响的存储库的分支中提供,并可通过拉取请求添加到主项目中。由于受影响的存储库数量众多,研究人员预计在接下来的几周内将继续这一修补工作。“预计这将影响所有易受攻击项目的 12.06%,到完成时将超过 7 万个项目。这是一个很大的数字,但绝不是 100%,因为所有的 Pull Request 都必须要被项目维护者接受”。
BleepingComputer 已联系 Python 软件基金会就 CVE-2007-4559 发表评论,但在发布时尚未收到答复。
更多详情可查看完整报告。