-
-
[原创]iOS解压缩库ZipArchive路径穿越问题
-
发表于:
2020-7-3 16:43
27250
-
[原创]iOS解压缩库ZipArchive路径穿越问题
盘古实验室公布的一个由目录穿越导致RCE的漏洞,称为ZipperDown。
由于现有的iOS App基本上采用SSZipArchive或Ziparchive来实现解压,因此漏洞是来自使用第三方Zip库解压Zip文件的过程中没有对Zip内文件名做校验导致的;例如 SSZipArchive解压时会把文件名直接拼接到目标路径后面,如果文件名中含有“../”则可以实现目录的上一级跳转,从而实现应用内任意目录的跳转,进一步可以实现文件覆盖。
这件事之后Ziparchive修复了该漏洞。代码中增加了一个 - (NSString *)_sanitizedPath 方法用于专门处理压缩包内的文件名,清除其中有害部分。
这个方法清理了路径中的有害部分:
效果示例:
处理前:
http%3a%2f%2ffc0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0X3j5#2)9J5k6r3g2V1K9i4c8G2M7W2)9J5k6h3!0J5k6#2)9J5y4e0u0X3K9h3&6X3L8#2)9J5y4e0u0X3M7X3k6U0x3e0M7K6z5q4)9J5y4e0y4W2
处理后:
http%253a%252f%252f17bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0X3j5#2)9J5k6r3g2V1K9i4c8G2M7W2)9J5k6h3!0J5k6#2)9J5y4e0t1#2x3X3k6A6L8X3k6G2i4K6t1#2x3U0f1J5k6Y4u0X3j5K6p5%4x3K6S2Q4x3U0f1J5y4e0y4W2
可以看到 "%" 被 "%25" 替换了
效果示例:
原路径:test/../code.png
添加前缀后:file:///test/../code.png
NSURL处理后获得绝对路径:file:///code.png
删除前缀:code.png
效果示例:
处理前:
http%253a%252f%252f6dfK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0X3j5#2)9J5k6r3g2V1K9i4c8G2M7W2)9J5k6h3!0J5k6#2)9J5y4e0t1#2x3X3k6A6L8X3k6G2i4K6t1#2x3U0f1J5k6Y4u0X3j5K6p5%4x3K6S2Q4x3U0f1J5y4e0y4W2
处理后:
http%3a%2f%2fc36K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0X3j5#2)9J5k6r3g2V1K9i4c8G2M7W2)9J5k6h3!0J5k6#2)9J5y4e0u0X3K9h3&6X3L8#2)9J5y4e0u0X3M7X3k6U0x3e0M7K6z5q4)9J5y4e0y4W2
可以看到 "%25" 被 "%" 替换了。
从源码的调试中,也发现一个小问题:
当文件名包含"..\"时,文件名被读取时会被默认加入一个"\"转义符,并最终造成了路径穿越。这个路径穿越能力非常有限。



[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2020-7-3 16:48
被luoyanbei编辑
,原因: