理解Python的tarfile模块中的路径遍历错误
最近,一个安全研究小组宣布他们在Python的tar文件提取功能中发现了一个15年前的漏洞。该漏洞于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维护者认为提取功能在做它应该做的事情。在这种情况下,有些人可能会说 "这是一个功能,不是一个错误"。不幸的是,开发者不可能总是避免从未知的来源提取 tar 或 zip 文件。作为安全开发实践的一部分,他们有责任对不信任的输入进行消毒,以防止路径穿越漏洞。
想了解更多关于如何用Python编写安全代码和降低风险的信息吗?
如果你有兴趣获得更多免费的编码指南,请查看安全代码教练,以帮助你保持在安全编码实践的顶端。


最近,一个安全研究小组宣布他们在Python的tar文件提取功能中发现了一个15年前的漏洞。该漏洞于2007年首次披露,并被追踪为CVE-2007-4559。在Python的官方文档中加入了一个说明,但这个漏洞本身却没有被修补。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。
预定一个演示Laura Verheyde 是Secure Code Warrior 的一名软件开发人员,主要负责研究漏洞并为Missions 和编码实验室创建内容。


最近,一个安全研究小组宣布他们在Python的tar文件提取功能中发现了一个15年前的漏洞。该漏洞于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维护者认为提取功能在做它应该做的事情。在这种情况下,有些人可能会说 "这是一个功能,不是一个错误"。不幸的是,开发者不可能总是避免从未知的来源提取 tar 或 zip 文件。作为安全开发实践的一部分,他们有责任对不信任的输入进行消毒,以防止路径穿越漏洞。
想了解更多关于如何用Python编写安全代码和降低风险的信息吗?
如果你有兴趣获得更多免费的编码指南,请查看安全代码教练,以帮助你保持在安全编码实践的顶端。

最近,一个安全研究小组宣布他们在Python的tar文件提取功能中发现了一个15年前的漏洞。该漏洞于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维护者认为提取功能在做它应该做的事情。在这种情况下,有些人可能会说 "这是一个功能,不是一个错误"。不幸的是,开发者不可能总是避免从未知的来源提取 tar 或 zip 文件。作为安全开发实践的一部分,他们有责任对不信任的输入进行消毒,以防止路径穿越漏洞。
想了解更多关于如何用Python编写安全代码和降低风险的信息吗?
如果你有兴趣获得更多免费的编码指南,请查看安全代码教练,以帮助你保持在安全编码实践的顶端。
最近,一个安全研究小组宣布他们在Python的tar文件提取功能中发现了一个15年前的漏洞。该漏洞于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维护者认为提取功能在做它应该做的事情。在这种情况下,有些人可能会说 "这是一个功能,不是一个错误"。不幸的是,开发者不可能总是避免从未知的来源提取 tar 或 zip 文件。作为安全开发实践的一部分,他们有责任对不信任的输入进行消毒,以防止路径穿越漏洞。
想了解更多关于如何用Python编写安全代码和降低风险的信息吗?
如果你有兴趣获得更多免费的编码指南,请查看安全代码教练,以帮助你保持在安全编码实践的顶端。
资源
安全技能基准测试:简化企业安全设计
寻找有关 "按设计确保安全 "计划成功与否的有意义的数据是众所周知的难题。首席信息安全官(CISO)在试图证明投资回报率(ROI)和安全计划活动在人员和公司层面上的商业价值时,往往会面临挑战。更不用说,企业要深入了解自己的组织是如何以当前的行业标准为基准的,更是难上加难。美国总统的《国家网络安全战略》向利益相关者提出了 "通过设计实现安全和弹性 "的挑战。让 "按设计保证安全 "计划发挥作用的关键不仅在于为开发人员提供确保代码安全的技能,还在于向监管机构保证这些技能已经到位。在本演讲中,我们将分享大量定性和定量数据,这些数据来自多个主要来源,包括从超过 25 万名开发人员那里收集的内部数据点、数据驱动的客户洞察力以及公共研究。利用这些数据点的汇总,我们旨在传达一个跨多个垂直领域的 "按设计保证安全 "计划的现状。报告详细阐述了这一领域目前未得到充分利用的原因、成功的技能提升计划对降低网络安全风险的重大影响,以及消除代码库中各类漏洞的潜力。