
安全编码技术。Zip库的默认行为可能导致远程代码执行
本周我们将讨论Zip库的默认行为。如果你是一个应用程序的开发者,你很可能曾经使用过这个方法。在互联网上下载的大多数资源都是zip格式的,这是有道理的;压缩后的数据更小,所以下载速度更快,消耗的带宽更少。
如果你想要一些更具体的例子:游戏的纹理,用于键盘自动完成的语言包,......。许多资源不是自动与应用程序捆绑在一起的,而是后来下载的。
但在使用这一功能时要谨慎,压缩文件中的文件名可能包含路径穿越信息。当提取时,这将导致在预定目录之外创建文件。这样做的目的往往是为了覆盖现有的文件。

假设我们有一个包含以下两个文件的压缩档案。
file1
.../file2
当这个归档文件被解压时,file1被解压在我们期望的地方,即解压目录下。然而,file2被写在比我们要求zip库解压的地方高一个目录。
所以要小心,如果你的zip库没有注意正确处理这种情况,它将允许攻击者在系统中写入一个任意文件。总是检查你的库是否安全,这个经验法则对任何库都有效,但特别是你知道要检查你的zip库对这些类型的文件的默认行为。
让我们演示一下在Android中不正确处理这种情况的后果。在Android中,使用了Java Zip库(java.util.zip),该库默认允许上述的路径遍历。
安卓的Dalvik可执行格式(.dex)对单个文件所能拥有的类的数量有限制。需要更多类的应用程序可以利用MultiDex支持库,该库从API级别21(Android 5.0 Lollipop)开始添加。这个库将二级.dex文件保存在应用程序的数据目录中,这个目录可由应用程序用户写入,当需要.dex文件时,这些代码将被加载和执行。
这意味着攻击者可以通过使用恶意的压缩包覆盖.dex文件来修改它,更糟糕的是,这个文件将被加载和执行,导致远程代码执行漏洞。这不仅仅是一个理论上的例子,而是已经在应用程序My Talking Tom上演示过了,该应用程序在应用程序商店的下载量超过1亿次。以下是在黑帽大会上展示的该漏洞的视频。

经常检查你的zip库的行为,这样你就能意识到它的不安全因素。如果你不能在你的zip库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。
如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。
下次见,请记住,无论是否有密码,都要有安全的密码。
- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。


本周我们将讨论Zip库的默认行为。如果你是一个应用程序的开发者,你很可能曾经使用过这个方法。在互联网上下载的大多数资源都是zip格式的,这是有道理的;压缩后的数据更小,所以下载速度更快,消耗的带宽更少。
如果你想要一些更具体的例子:游戏的纹理,用于键盘自动完成的语言包,......。许多资源不是自动与应用程序捆绑在一起的,而是后来下载的。
但在使用这一功能时要谨慎,压缩文件中的文件名可能包含路径穿越信息。当提取时,这将导致在预定目录之外创建文件。这样做的目的往往是为了覆盖现有的文件。

假设我们有一个包含以下两个文件的压缩档案。
file1
.../file2
当这个归档文件被解压时,file1被解压在我们期望的地方,即解压目录下。然而,file2被写在比我们要求zip库解压的地方高一个目录。
所以要小心,如果你的zip库没有注意正确处理这种情况,它将允许攻击者在系统中写入一个任意文件。总是检查你的库是否安全,这个经验法则对任何库都有效,但特别是你知道要检查你的zip库对这些类型的文件的默认行为。
让我们演示一下在Android中不正确处理这种情况的后果。在Android中,使用了Java Zip库(java.util.zip),该库默认允许上述的路径遍历。
安卓的Dalvik可执行格式(.dex)对单个文件所能拥有的类的数量有限制。需要更多类的应用程序可以利用MultiDex支持库,该库从API级别21(Android 5.0 Lollipop)开始添加。这个库将二级.dex文件保存在应用程序的数据目录中,这个目录可由应用程序用户写入,当需要.dex文件时,这些代码将被加载和执行。
这意味着攻击者可以通过使用恶意的压缩包覆盖.dex文件来修改它,更糟糕的是,这个文件将被加载和执行,导致远程代码执行漏洞。这不仅仅是一个理论上的例子,而是已经在应用程序My Talking Tom上演示过了,该应用程序在应用程序商店的下载量超过1亿次。以下是在黑帽大会上展示的该漏洞的视频。

经常检查你的zip库的行为,这样你就能意识到它的不安全因素。如果你不能在你的zip库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。
如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。
下次见,请记住,无论是否有密码,都要有安全的密码。
- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。

本周我们将讨论Zip库的默认行为。如果你是一个应用程序的开发者,你很可能曾经使用过这个方法。在互联网上下载的大多数资源都是zip格式的,这是有道理的;压缩后的数据更小,所以下载速度更快,消耗的带宽更少。
如果你想要一些更具体的例子:游戏的纹理,用于键盘自动完成的语言包,......。许多资源不是自动与应用程序捆绑在一起的,而是后来下载的。
但在使用这一功能时要谨慎,压缩文件中的文件名可能包含路径穿越信息。当提取时,这将导致在预定目录之外创建文件。这样做的目的往往是为了覆盖现有的文件。

假设我们有一个包含以下两个文件的压缩档案。
file1
.../file2
当这个归档文件被解压时,file1被解压在我们期望的地方,即解压目录下。然而,file2被写在比我们要求zip库解压的地方高一个目录。
所以要小心,如果你的zip库没有注意正确处理这种情况,它将允许攻击者在系统中写入一个任意文件。总是检查你的库是否安全,这个经验法则对任何库都有效,但特别是你知道要检查你的zip库对这些类型的文件的默认行为。
让我们演示一下在Android中不正确处理这种情况的后果。在Android中,使用了Java Zip库(java.util.zip),该库默认允许上述的路径遍历。
安卓的Dalvik可执行格式(.dex)对单个文件所能拥有的类的数量有限制。需要更多类的应用程序可以利用MultiDex支持库,该库从API级别21(Android 5.0 Lollipop)开始添加。这个库将二级.dex文件保存在应用程序的数据目录中,这个目录可由应用程序用户写入,当需要.dex文件时,这些代码将被加载和执行。
这意味着攻击者可以通过使用恶意的压缩包覆盖.dex文件来修改它,更糟糕的是,这个文件将被加载和执行,导致远程代码执行漏洞。这不仅仅是一个理论上的例子,而是已经在应用程序My Talking Tom上演示过了,该应用程序在应用程序商店的下载量超过1亿次。以下是在黑帽大会上展示的该漏洞的视频。

经常检查你的zip库的行为,这样你就能意识到它的不安全因素。如果你不能在你的zip库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。
如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。
下次见,请记住,无论是否有密码,都要有安全的密码。
- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。
本周我们将讨论Zip库的默认行为。如果你是一个应用程序的开发者,你很可能曾经使用过这个方法。在互联网上下载的大多数资源都是zip格式的,这是有道理的;压缩后的数据更小,所以下载速度更快,消耗的带宽更少。
如果你想要一些更具体的例子:游戏的纹理,用于键盘自动完成的语言包,......。许多资源不是自动与应用程序捆绑在一起的,而是后来下载的。
但在使用这一功能时要谨慎,压缩文件中的文件名可能包含路径穿越信息。当提取时,这将导致在预定目录之外创建文件。这样做的目的往往是为了覆盖现有的文件。

假设我们有一个包含以下两个文件的压缩档案。
file1
.../file2
当这个归档文件被解压时,file1被解压在我们期望的地方,即解压目录下。然而,file2被写在比我们要求zip库解压的地方高一个目录。
所以要小心,如果你的zip库没有注意正确处理这种情况,它将允许攻击者在系统中写入一个任意文件。总是检查你的库是否安全,这个经验法则对任何库都有效,但特别是你知道要检查你的zip库对这些类型的文件的默认行为。
让我们演示一下在Android中不正确处理这种情况的后果。在Android中,使用了Java Zip库(java.util.zip),该库默认允许上述的路径遍历。
安卓的Dalvik可执行格式(.dex)对单个文件所能拥有的类的数量有限制。需要更多类的应用程序可以利用MultiDex支持库,该库从API级别21(Android 5.0 Lollipop)开始添加。这个库将二级.dex文件保存在应用程序的数据目录中,这个目录可由应用程序用户写入,当需要.dex文件时,这些代码将被加载和执行。
这意味着攻击者可以通过使用恶意的压缩包覆盖.dex文件来修改它,更糟糕的是,这个文件将被加载和执行,导致远程代码执行漏洞。这不仅仅是一个理论上的例子,而是已经在应用程序My Talking Tom上演示过了,该应用程序在应用程序商店的下载量超过1亿次。以下是在黑帽大会上展示的该漏洞的视频。

经常检查你的zip库的行为,这样你就能意识到它的不安全因素。如果你不能在你的zip库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。
如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。
下次见,请记住,无论是否有密码,都要有安全的密码。
- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。
资源
Secure Code Warrior corporate overview
Secure Code Warrior is an AI Software Governance platform designed to enable organizations to safely adopt AI-driven development by bridging the gap between development velocity and enterprise security. The platform addresses the "Visibility Gap," where security teams often lack insights into shadow AI coding tools and the origins of production code.
安全代码培训主题和内容
Our industry-leading content is always evolving to fit the ever changing software development landscape with your role in mind. Topics covering everything from AI to XQuery Injection, offered for a variety of roles from Architects and Engineers to Product Managers and QA. Get a sneak peek of what our content catalog has to offer by topic and role.
资源
Observe and Secure the ADLC: A Four-Point Framework for CISOs and Development Teams Using AI
While development teams look to make the most of GenAI’s undeniable benefits, we’d like to propose a four-point foundational framework that will allow security leaders to deploy AI coding tools and agents with a higher, more relevant standard of security best practices. It details exactly what enterprises can do to ensure safe, secure code development right now, and as agentic AI becomes an even bigger factor in the future.







