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

本周我们将讨论 Zip 库的默认行为。如果你是一名应用程序开发人员,很可能已经使用过它。互联网上下载的大多数资源都是 zip 格式,这很合理;压缩数据体积更小,下载速度更快,且占用的带宽更少。
如果需要更具体的例子:游戏纹理、键盘自动补全的语言包等。许多资源并非随应用程序自动打包,而是后续下载的。
但使用此功能时要小心,zip 归档文件中的文件名可能包含路径遍历信息。解压时,这会导致文件被创建在目标目录之外。这种做法通常是为了覆盖现有文件。

假设我们有一个包含以下两个文件的 zip 归档:
file1
../file2
当解压此归档时,file1 会按预期解压到解压目录中。然而,file2 会被写入到我们指定解压目录的上一级目录中。
因此请务必小心,如果你的 zip 库没有妥善处理这种情况,它将允许攻击者在系统中写入任意文件。请务必检查你的库是否安全,这条经验法则适用于任何库,尤其要检查你的 zip 库针对此类文件的默认行为。
让我们演示一下在 Android 中未妥善处理此情况的后果。在 Android 中,使用的是 Java Zip 库 (java.util.zip),该库默认允许上述路径遍历。
Android 的 Dalvik 可执行格式 (.dex) 对单个文件包含的类数量有限制。需要更多类的应用可以使用自 API 21 级(Android 5.0 Lollipop)起添加的 MultiDex 支持库。该库将辅助 .dex 文件保存在应用程序的数据目录中,该目录可由应用用户写入,且当需要 .dex 文件时,此代码会被加载并执行。
这意味着攻击者可以通过恶意 zip 归档覆盖 .dex 文件来对其进行修改,更糟糕的是,该文件会被加载并执行,从而导致远程代码执行漏洞。这不仅仅是一个理论示例,在下载量超过 1 亿次的“会说话的汤姆猫”应用中已得到证实。这是在 Black Hat 上演示该漏洞的视频。

请务必检查你的 zip 库的行为,以了解其不安全性。如果无法在 zip 库中禁用路径遍历,请确保在解压每个条目之前验证其名称。名称应进行规范化,且生成的路径应位于你想要解压归档的目录内。顺便提一下,你还应该检查解压后归档的总大小以防止 zip 炸弹,但这将是另一周的话题。
如果你想 挑战一些路径遍历题目 或想测试你的安全编码技能,请查看我们的平台。
下次见,记住,要么安全编码,要么不写代码!
- 我们可以向 zip 中注入一个文件名以任意数量的 " ../ " 为前缀的文件
- 如果 zip 库没有妥善处理这种情况,它将允许我们写入到目标解压目录之外
- 如果 zip 文件不可信,这会给攻击者提供任意写入漏洞
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)