博客

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

皮特-德-克雷默
发表于2017年11月13日

本周我们将讨论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

查看资源
查看资源

我们可以将一个文件注入到压缩包中,该文件的名称前缀为

想了解更多信息?

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

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

预定一个演示
分享到
作者
皮特-德-克雷默
发表于2017年11月13日

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

分享到

本周我们将讨论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

查看资源
查看资源

请填写下表下载报告

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

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。

本周我们将讨论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 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

查看报告预定一个演示
下载PDF
查看资源
分享到
想了解更多信息?

分享到
作者
皮特-德-克雷默
发表于2017年11月13日

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

分享到

本周我们将讨论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 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

预定一个演示下载
分享到
资源中心
资源中心