安全编码技术。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库中禁用路径遍历,请确保在解压前验证每个条目的名称。名称应该是规范化的,并且产生的路径应该是在你想解压的目录中。当我们在做这件事的时候,你还应该检查解压缩文件的总大小,以防止压缩炸弹,但这将是另一个星期的文章。
如果你想玩一些关于路径穿越的挑战,或者想测试你的安全编码技能,请查看我们的平台。
下次见,请记住,无论是否有密码,都要有安全的密码。
- 我们可以向一个名字前缀为任意数量的".../"的压缩文件注入
- 如果压缩库不注意正确处理这种情况,它将允许我们在预定的提取目录之外写入
- 如果压缩文件是不可信任的,这给攻击者一个任意写入的漏洞。
资源
安全技能基准测试:简化企业安全设计
寻找有关 "按设计确保安全 "计划成功与否的有意义的数据是众所周知的难题。首席信息安全官(CISO)在试图证明投资回报率(ROI)和安全计划活动在人员和公司层面上的商业价值时,往往会面临挑战。更不用说,企业要深入了解自己的组织是如何以当前的行业标准为基准的,更是难上加难。美国总统的《国家网络安全战略》向利益相关者提出了 "通过设计实现安全和弹性 "的挑战。让 "按设计保证安全 "计划发挥作用的关键不仅在于为开发人员提供确保代码安全的技能,还在于向监管机构保证这些技能已经到位。在本演讲中,我们将分享大量定性和定量数据,这些数据来自多个主要来源,包括从超过 25 万名开发人员那里收集的内部数据点、数据驱动的客户洞察力以及公共研究。利用这些数据点的汇总,我们旨在传达一个跨多个垂直领域的 "按设计保证安全 "计划的现状。报告详细阐述了这一领域目前未得到充分利用的原因、成功的技能提升计划对降低网络安全风险的重大影响,以及消除代码库中各类漏洞的潜力。