首页
社区
课程
招聘
[原创]iOS解压缩库ZipArchive路径穿越问题
发表于: 2020-7-3 16:43 26893

[原创]iOS解压缩库ZipArchive路径穿越问题

2020-7-3 16:43
26893

盘古实验室公布的一个由目录穿越导致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" 被 "%" 替换了。

从源码的调试中,也发现一个小问题:
当文件名包含"..\"时,文件名被读取时会被默认加入一个"\"转义符,并最终造成了路径穿越。这个路径穿越能力非常有限。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-7-3 16:48 被luoyanbei编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 489
活跃值: (992)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
学习了,大佬
2020-7-4 11:24
0
游客
登录 | 注册 方可回帖
返回
//