深入解析 Python tarfile 模块中的路径遍历漏洞

最近,一个安全研究团队宣布在 Python 的 tar 文件提取功能中发现了一个存在了十五年的漏洞。该漏洞最早于 2007 年披露,被追踪为 CVE-2007-4559。虽然 Python 官方文档中添加了相关说明,但该漏洞本身一直未被修复。
该漏洞可能影响数以千计的软件项目,但许多人并不了解这一情况或如何处理它。因此,在 Secure Code Warrior,我们为您提供了一个模拟利用此漏洞的机会,让您亲身体验其影响,并获得处理这一顽固漏洞的实战经验,从而更好地保护您的应用程序!
立即尝试模拟 任务。
漏洞:tar 文件提取过程中的路径遍历
路径或目录遍历是指在构建文件路径时使用了未经清理的用户输入,从而允许攻击者访问并覆盖文件,甚至执行任意代码。
该漏洞存在于 Python 的 tarfile 模块中。tar(磁带归档)文件是一种称为归档文件的单一文件。它将多个文件及其元数据打包在一起,通常通过 .tar.gz 或 .tgz 扩展名来识别。归档中的每个成员都可以由一个 TarInfo 对象表示,该对象包含文件名、修改时间、所有权等元数据。
风险源于归档文件被再次提取的能力。
在提取时,每个成员都需要一个写入路径。该位置是通过将基本路径与文件名连接起来创建的:

一旦创建了此路径,它就会被传递给 tarfile.extract 或 tarfile.extractall 函数来执行提取:

这里的问题在于缺乏对文件名的清理。攻击者可以重命名文件以包含路径遍历字符,例如 点点斜杠 (../),这将导致文件遍历出其预定目录并覆盖任意文件。这最终可能导致远程代码执行,非常容易被利用。
如果您知道如何识别,就会发现该漏洞在其他场景中也存在。除了 Python 对 tar 文件的处理外,该漏洞还存在于 zip 文件的提取中。您可能以其他名称熟悉这一点,例如 zip slip 漏洞,它已经在除 Python 之外的其他语言中出现过!
如何降低风险?
尽管该漏洞已为人所知多年,但 Python 维护者认为提取功能正在执行 其应有的功能。在这种情况下,有些人可能会说“这是一个特性,而不是一个 bug”。不幸的是,开发人员无法总是避免从未知来源提取 tar 或 zip 文件。作为安全开发实践的一部分,他们有责任清理不受信任的输入,以防止路径遍历漏洞。
想了解更多关于如何编写安全代码并降低 Python 开发风险的内容吗?
立即免费体验我们的 Python 挑战赛。
如果您想获取更多免费的编码指南,请查看 Secure Code Coach,它能助您时刻掌握安全编码的最佳实践。
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)