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