ZipperDown

漏洞应急响应的第二个练习
盘古实验室对外披露了 ZipperDown 漏洞,该漏洞是盘古团队针对不同客户的 iOS 应用安全审计的过程中发现的,大约有 10 %的 iOS 应用会受到此漏洞的影响。然而, 危害真的这么大吗?

ZipperDown 简介

ZipperDown 漏洞并非 iOS 平台自身问题,而是与 Zip 文件解压有关。iOS 平台没有提供官方的 unzipAPI 函数,而是引用了第三方库来实现解压功能,由于现有的 iOS App 基本上采用 SSZipArchive 或 Ziparchive 来实现解压,因此漏洞是来自使用第三方 Zip 库解压 Zip 文件的过程中没有对 Zip 内文件名做校验导致的。如果文件名中含有“../”则可以实现目录的上一级跳转,从而实现应用内任意目录的跳转,进一步可以实现文件覆盖,如果把 App 的 hotpatch 文件覆盖替换了,可以达到执行黑客指定指令,从而按照黑客的意图实现任意应用内攻击。

贴一个乌云镜像站的安卓端的类似漏洞分析: Android 安全开发之 ZIP 文件目录遍历

下图为一个安卓程序正常解压缩代码示例:
zip
在标注处可以看出,当对一个 zip 文件进行解压时,通过遍历获得 zip 包中的压缩文件文件名,通过路径拼接获取解压目标路径。但是由于 zip 包中允许存在类似 ../ 的文件路径格式,因此拼接出来的路径可以实现路径穿越,将 zip 包中的文件解压缩到外面的路径。

攻击者通过构建如下图所示的热修复升级包 update.zip,其中存在路径穿越的恶意运行库 libpay.so,解压后替换本地原来的 libpay.so,攻击者就成功的在当前程序中插入了自己恶意运行库,后续可以尝试窃取信息,业务劫持等操作。
zip

响应过程

最开始的时候是在盘古公众号看到的,说的遮遮掩掩。。。

ZipperDown 的本质实际上是路径问题, 利用 ../ 来访问任意目录达到写入恶意文件的目的. 这类漏洞并不罕见. 也不局限于手机端. 然而, 危害真的这么大吗?

根据盘古出的漏洞预警信息我们可以知道:

  1. 攻击者需要与受害者处于同一局域网下, 并且劫持通信
  2. 然后再用构造指定的恶意文件
  3. 在用户请求升级或者热补丁或者下载插件或主题的时候
  4. 插入到指定的路径下
  5. 才能实现覆盖进而做出攻击.

对应的问题如下:

  1. 攻击者实际上已经在一定程度上接管了局域网, 在这样的环境中, 已经可以做出很多事了. 嗅探也好, arp 攻击也好, 总之, 危害已经很大了.
  2. 需要对指定的 app 构造特定的恶意文件, 也就是说, 恶意文件的通用性很差(构造麻烦)
  3. 攻击者攻击的时候用户正好处于更新 app 状态, 这里的更新包括但不限于: 升级, 热补丁, 下载插件, 主题等
  4. 同 2
  5. 费了这么大劲, 人品爆发, 终于成功了

以上可以看出, 漏洞确实危害不小, 但是利用场景真的无比捉鸡. 抛开利用场景谈危害就是耍流氓...

修复方案

  1. 应用在加载外部 zip 压缩包时,需要对压缩包中解压路径进行校验。
  2. 过滤非法字符
  3. 应用在加载外部 zip 包,可以采用校验机制,确保加载的 zip 包确实为合法 zip,没有被替换。(hash 等)
  4. 应用下载 zip 包的通信信道,采用安全通信通道确保不存在被篡改、劫持、替换的可能。(https 等)

后记

漏洞爆出来后, 预警的预警, 宣传的宣传, 大家各取所需也没啥问题. 只是希望大家能更理性的看待漏洞, 不至于陷入盲从.

另外, 类似解压等通用功能的漏洞,一个平台爆出了漏洞,其他平台往往也受到牵连. 但是 Android 端爆出后 iOS 端却波澜不惊...明明是极其相似的, 却没有一起被挖出来


来呀快活呀


ZipperDown
https://www.tr0y.wang/2018/05/15/zipperdown/
作者
Tr0y
发布于
2018年5月15日
更新于
2024年4月19日
许可协议