-
-
[原创]iOS解压缩库ZipArchive路径穿越问题
-
发表于:
2020-7-3 16:43
26892
-
[原创]iOS解压缩库ZipArchive路径穿越问题
盘古实验室公布的一个由目录穿越导致RCE的漏洞,称为ZipperDown。
由于现有的iOS App基本上采用SSZipArchive或Ziparchive来实现解压,因此漏洞是来自使用第三方Zip库解压Zip文件的过程中没有对Zip内文件名做校验导致的;例如 SSZipArchive解压时会把文件名直接拼接到目标路径后面,如果文件名中含有“../”则可以实现目录的上一级跳转,从而实现应用内任意目录的跳转,进一步可以实现文件覆盖。
这件事之后Ziparchive修复了该漏洞。代码中增加了一个 - (NSString *)_sanitizedPath 方法用于专门处理压缩包内的文件名,清除其中有害部分。
这个方法清理了路径中的有害部分:
效果示例:
处理前:
http%3a%2f%2fwww.rfc-editor.org%2finfo%2frfc1738%3e
处理后:
http%253a%252f%252fwww.rfc-editor.org%252finfo%252frfc1738%253e
可以看到 "%" 被 "%25" 替换了
效果示例:
原路径:test/../code.png
添加前缀后:file:///test/../code.png
NSURL处理后获得绝对路径:file:///code.png
删除前缀:code.png
效果示例:
处理前:
http%253a%252f%252fwww.rfc-editor.org%252finfo%252frfc1738%253e
处理后:
http%3a%2f%2fwww.rfc-editor.org%2finfo%2frfc1738%3e
可以看到 "%25" 被 "%" 替换了。
从源码的调试中,也发现一个小问题:
当文件名包含"..\"时,文件名被读取时会被默认加入一个"\"转义符,并最终造成了路径穿越。这个路径穿越能力非常有限。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-7-3 16:48
被luoyanbei编辑
,原因: