ZipperDown漏洞简单分析及防护

简介:

0x00 序

盘古实验室在针对不同客户的iOS应用安全审计过程中,发现了一类通用的安全漏洞。该漏洞被发布在了[1]。经过盘古的分析,确认微博、陌陌、网易云音乐、QQ音乐、快手等流行应用受影响,另外还有大约10%的iOS应用应用可能受此漏洞的影响。

根据漏洞名称大概可以猜测出与zip文件有关,查询iOS上与解压相关资料可以看到,iOS并没有提供官方的unzip API函数,基本上现有的iOS app都是使用的SSZipArchive或ziparchive这两个第三方库来实现解压的功能。随后根据盘古在SSZipArchive项目的issue中提交的漏洞报告[2]可以大概确定漏洞原理是:使用第三方zip库在解压zip文件过程中没有考虑文件名中带有”../../”这样的情况,从而产生了目录穿越漏洞。因此,如果一个iOS应用下载了恶意的zip文件,并且使用ziparchive库解压,利用漏洞可以做到app container目录下的任意文件覆盖,如果覆盖了应用重要的文件会造成应用崩溃(DOS),如果覆盖了app的hotpatch文件则会造成代码执行。

0x01 构造恶意的ZIP文件(POC)

(因为很多app并没有修复该漏洞,因此POC暂不公布,想要了解细节的同学可以联系阿里巴巴SRC)

0x02 复现攻击

正常情况下,应用会在启动或者某些情况下会执行hotpatch的js脚本。在我们用来demo的应用中需要点击一下”Run Hotpatch”来运行js脚本:

ZipperDown漏洞简单分析及防护

点击完后,应用会加载自己目录下的“/Library/Caches/hotpatch/patch.js”并执行:

ZipperDown漏洞简单分析及防护

ZipperDown漏洞简单分析及防护

随后我们点击“Download and Unzip”,应用会通过http下载一个zip包到本地,并使用SSZipArchive库进行解压,如果我们采用DNS劫持将正常的zip包替换为恶意的zip包的话,虽然程序会将zip解压到download目录,但是我们成功利用目录穿越漏洞,让patch.js解压到了如下位置:/Library/Caches/download/../hotpatch/patch.js,并成功将正常的patch.js给替换成了恶意的patch.js:

ZipperDown漏洞简单分析及防护

ZipperDown漏洞简单分析及防护

演示DEMO:https://v.qq.com/x/page/a0655dtirv7.html

ZipperDown漏洞简单分析及防护

0x03 防御方案

最完整的解决方案是对SSZipArchive库进行修补,在解压函数:

+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination preserveAttributes:(BOOL)preserveAttributes overwrite:(BOOL)overwrite nestedZipLevel:(NSInteger)nestedZipLevel password:(nullable NSString *)password error:(NSError **)error delegate:(nullable id<SSZipArchiveDelegate>)delegate progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler

中对最终解压的strPath进行检测,如果出现可能造成目录穿越的”../”字符串时进行拦截。

另外,Hotpatch包除了传输过程中要加密外,在本地也需要加密保存,并且运行前做完整性校验。虽然漏洞覆盖某些重要的文件可能会造成拒绝服务攻击,但至少不会造成代码执行。

0x04 总结

正如JSPatch的作者bang所讲的:“攻击条件:1.APP用了ZipArchive 2.原APP下发的某个zip包传输过程没加密,zip包也没加密 3.原APP使用了JSPatch或其他执行引擎,且本地脚本没有加密,只要把脚本放指定目录即可执行 4.用户连上第三方wifi遭受攻击。恰好视频中的微博满足这些苛刻条件。危害很小,能被攻击的APP也很少。”

因此,能够造成代码执行的应用可能没有想象中那么多,但黑客依然有可能利用任意文件覆盖的漏洞能力对应用进行攻击,造成意想不到的效果。

0x05 参考资料

  1. zipperdown.org

  2. github.com/ZipArchive/…

蒸米,白小龙 @ 阿里基础安全研究


原文发布时间为:2018-05-18

本文来自云栖社区合作伙伴“嘶吼网”,了解相关信息可以关注“嘶吼网”。

相关文章
|
存储 安全 对象存储
如何简单快速搭建自己的云对象存储服务(OSS)
简单来说,其实我们只需要有一台服务器,利用服务器的各种资源,搭配其它厂商开发的软件,就能很轻易拥有自己的云对象存储服务。不需要在阿里云上花钱买什么服务,甚至还能自己给别人提供服务,真的是太爽了。
|
11月前
|
存储 关系型数据库 数据库
极简开发,极速上线:构建端到端大模型应用
本文将以一个经典的 RAG(检索增强生成)知识问答系统为例,详细介绍从智能体设计到最终应用部署的全流程。
1649 82
|
SQL 安全 数据可视化
代码审计神器:Fortify SCA 保姆级教程
代码审计神器:Fortify SCA 保姆级教程
代码审计神器:Fortify SCA 保姆级教程
|
安全 Android开发 C++
在 Android 中使用 Kotlin 调用动态库
在 Android 中使用 Kotlin 调用动态库
701 0
|
Java Shell Maven
JAVA实现PGP/GPG加解密加验签
JAVA实现PGP/GPG加解密加验签
3005 0
|
安全 Linux 编译器
从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr(下)
从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr
132 3
|
缓存 负载均衡 应用服务中间件
nginx的各种负载均衡策略与各种负载均衡策略如何配置
Nginx支持多种负载均衡策略,如轮询、加权轮询、IP哈希、最少连接、URL哈希和fair策略。轮询是默认策略,每个请求按顺序分发;加权轮询根据权重分配请求;IP哈希确保相同IP的请求始终发送到同一服务器;最少连接将请求发送给连接数最少的服务器;URL哈希(需额外工具或模块)和fair策略则依据URL和响应时间分配请求。配置变更需更新nginx.conf并重新加载或重启服务,具体配置应参照官方文档。
882 0
|
安全
[UDS] --- CommunicationControl 0x28
[UDS] --- CommunicationControl 0x28
662 0
|
JavaScript 前端开发 API
Joi数据验证
Joi数据验证讲解
465 0