SCW图标
英雄背景无分隔线
博客

安全编码技术:Zip 库的默认行为可能会导致远程代码执行

皮特-德-克雷默
发表于 2017 年 11 月 13 日
最后更新于 2026年3月9日

本周我们将讨论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库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。

如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。

下次见,请记住,无论是否有密码,都要有安全的密码。

- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

查看资源
查看资源

我们可以将一个文件注入到一个名称前缀为 zip 的 zip

对更多感兴趣?

应用安全研究员-研发工程师-博士生

了解更多

Secure Code Warrior可帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全置于首位的文化。无论您是应用安全经理、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能帮助您的组织降低与不安全代码相关的风险。

预约演示
分享到:
领英品牌社交x 标志
作者
皮特-德-克雷默
发表于2017年11月13日

应用安全研究员-研发工程师-博士生

分享到:
领英品牌社交x 标志

本周我们将讨论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库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。

如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。

下次见,请记住,无论是否有密码,都要有安全的密码。

- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

查看资源
查看资源

填写下面的表格下载报告

我们希望获得您的许可,以便向您发送有关我们的产品和/或相关安全编码主题的信息。我们将始终非常谨慎地对待您的个人信息,绝不会出于营销目的将其出售给其他公司。

提交
scw 成功图标
SCW 错误图标
要提交表单,请启用“分析”Cookie。完成后,可以随意再次禁用它们。

本周我们将讨论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库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。

如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。

下次见,请记住,无论是否有密码,都要有安全的密码。

- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

观看网络研讨会
开始吧
了解更多

点击下面的链接并下载此资源的PDF。

Secure Code Warrior可帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全置于首位的文化。无论您是应用安全经理、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能帮助您的组织降低与不安全代码相关的风险。

查看报告预约演示
查看资源
分享到:
领英品牌社交x 标志
对更多感兴趣?

分享到:
领英品牌社交x 标志
作者
皮特-德-克雷默
发表于2017年11月13日

应用安全研究员-研发工程师-博士生

分享到:
领英品牌社交x 标志

本周我们将讨论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库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。

如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。

下次见,请记住,无论是否有密码,都要有安全的密码。

- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

目录

下载PDF
查看资源
对更多感兴趣?

应用安全研究员-研发工程师-博士生

了解更多

Secure Code Warrior可帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全置于首位的文化。无论您是应用安全经理、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能帮助您的组织降低与不安全代码相关的风险。

预约演示下载
分享到:
领英品牌社交x 标志
资源中心

帮助您入门的资源

更多帖子
资源中心

帮助您入门的资源

更多帖子