0x01 漏洞危害
1. 在使用 HTTP 下载 zip 包并使用有问题的第三方库 unzip 时,攻击者通过劫持 HTTP 流量,可以导致 APP 下载一个恶意的 zip 包,在解压 zip 包时可以任意覆盖 APP 文件夹内的内容,从而影响用户正常使用。
2. 对使用了JSPatch 或其他热更新技术的 APP,可能可以导致控制代码执行。
0x02 漏洞详情
第三方 unzip 库,在解压 zip 包时未检查解压路径,当使用这些第三方的库解压时未过滤包含”../../../”的文件路径以及符号链接文件,导致APP 自身的其它文件被替换。
可能存在的第三方库:
1. SSZipArchive
[unzipFileAtPath:toDestination:overwrite:password:error:delegate:] 函数在解析 zip 文件获取完整文件路径时,没有考虑到文件名中存在”../../../“的情况
2. ZipArchive
[ZipArchive UnzipFileTo:overWrite:] 函数在解析 zip 文件获取完整文件路径时,没有考虑到文件名中存在”../../../“的情况
0x03 修复方案
1. 在解压时考虑路径穿越问题,对最终路径做”../../../”文件名和符号链接的过滤。
2. 严格使用 https 下载资源, 或者对下载的文件进行校验防止被恶意修改。
0x04 相关参考