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 包中的文件解压缩到外面的路径。
攻击者通过构建如下图所示的热修复升级包 update.zip,其中存在路径穿越的恶意运行库 libpay.so,解压后替换本地原来的 libpay.so,攻击者就成功的在当前程序中插入了自己恶意运行库,后续可以尝试窃取信息,业务劫持等操作。
响应过程
最开始的时候是在盘古公众号看到的,说的遮遮掩掩。。。
ZipperDown 的本质实际上是路径问题, 利用 ../
来访问任意目录达到写入恶意文件的目的. 这类漏洞并不罕见. 也不局限于手机端. 然而, 危害真的这么大吗?
根据盘古出的漏洞预警信息我们可以知道:
- 攻击者需要与受害者处于同一局域网下, 并且劫持通信
- 然后再用构造指定的恶意文件
- 在用户请求升级或者热补丁或者下载插件或主题的时候
- 插入到指定的路径下
- 才能实现覆盖进而做出攻击.
对应的问题如下:
- 攻击者实际上已经在一定程度上接管了局域网, 在这样的环境中, 已经可以做出很多事了. 嗅探也好, arp 攻击也好, 总之, 危害已经很大了.
- 需要对指定的 app 构造特定的恶意文件, 也就是说, 恶意文件的通用性很差(构造麻烦)
- 攻击者攻击的时候用户正好处于更新 app 状态, 这里的更新包括但不限于: 升级, 热补丁, 下载插件, 主题等
- 同 2
- 费了这么大劲, 人品爆发, 终于成功了
以上可以看出, 漏洞确实危害不小, 但是利用场景真的无比捉鸡. 抛开利用场景谈危害就是耍流氓...
修复方案
- 应用在加载外部 zip 压缩包时,需要对压缩包中解压路径进行校验。
- 过滤非法字符
- 应用在加载外部 zip 包,可以采用校验机制,确保加载的 zip 包确实为合法 zip,没有被替换。(hash 等)
- 应用下载 zip 包的通信信道,采用安全通信通道确保不存在被篡改、劫持、替换的可能。(https 等)
后记
漏洞爆出来后, 预警的预警, 宣传的宣传, 大家各取所需也没啥问题. 只是希望大家能更理性的看待漏洞, 不至于陷入盲从.
另外, 类似解压等通用功能的漏洞,一个平台爆出了漏洞,其他平台往往也受到牵连. 但是 Android 端爆出后 iOS 端却波澜不惊...明明是极其相似的, 却没有一起被挖出来
来呀快活呀