You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查并修复Cordova iOS应用的Zipperdown漏洞?

排查与解决Cordova iOS应用的Zipperdown漏洞

一、漏洞排查步骤

  • 确认解压库版本:检查项目中使用的ZipArchive或SSZipArchive版本,旧版本(如SSZipArchive 2.2.2之前、ZipArchive v1.5.1之前)普遍存在路径遍历漏洞,允许解压包含../的恶意文件路径。
  • 审计解压逻辑:定位代码中所有调用解压库的位置,查看是否未对解压文件的路径做校验——如果直接将zip内的文件路径拼接至目标目录,未过滤../等父目录跳转符,就存在风险。
  • 检查网络传输安全性:确认zip文件的下载链路是否使用非加密HTTP协议,这类链路极易被MiTM攻击替换文件;即便用HTTPS,也要检查是否存在绕过证书校验的代码(比如Info.plist中NSAllowsArbitraryLoads设为YES且无合理例外)。
  • 核查动态代码加载路径:查看应用是否通过Cordova JavaScript桥加载本地可写目录(如Documents、Library)中的JS文件——这类目录若被恶意zip覆盖,会直接导致远程代码执行。

二、漏洞修复方案

  • 升级解压库至安全版本:
    将SSZipArchive升级到2.2.2及以上,ZipArchive升级到v1.5.2及以上。这些版本已内置路径校验,会自动拦截试图跳转到父目录的恶意文件。
  • 手动添加路径校验(若无法升级库):
    在解压前或解压后,强制校验所有文件的绝对路径,确保其落在目标解压目录范围内。示例代码(SSZipArchive):
    NSString *safeDestPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    [SSZipArchive unzipFileAtPath:zipFilePath toDestination:safeDestPath completionHandler:^(NSString *path, BOOL succeeded, NSError *error) {
        if (succeeded) {
            NSFileManager *fm = [NSFileManager defaultManager];
            NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath:safeDestPath];
            NSString *fileName;
            while ((fileName = [enumerator nextObject])) {
                NSString *fullFilePath = [safeDestPath stringByAppendingPathComponent:fileName];
                // 校验路径是否为目标目录的子路径
                if (![fullFilePath hasPrefix:safeDestPath]) {
                    [fm removeItemAtPath:fullFilePath error:nil];
                    succeeded = NO;
                    error = [NSError errorWithDomain:@"ZipperdownFix" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"检测到恶意路径文件"}];
                    break;
                }
            }
        }
        // 后续处理逻辑
    }];
    
  • 强制加密zip传输链路:
    所有zip文件的下载请求必须使用HTTPS,且严格校验服务器证书。禁止在Info.plist中全局开启NSAllowsArbitraryLoads,仅对必要的非HTTPS域名添加例外。
  • 限制动态代码加载的安全范围:
    • 优先从应用Bundle目录(只读,无法被篡改)加载动态JS代码;
    • 若必须从可写目录加载,需在下载zip时附带文件哈希值,解压后逐个验证文件哈希,确保未被篡改;
    • 在Cordova的config.xml中配置严格的Content-Security-Policy,限制脚本加载来源:
      <content-security-policy>
          default-src 'self' https:;
          script-src 'self' 'unsafe-inline' 'unsafe-eval' https:;
          style-src 'self' 'unsafe-inline';
          img-src 'self' data: https:;
      </content-security-policy>
      
  • 验证修复效果:
    构造包含../路径的恶意zip文件,测试应用是否会拦截解压;同时模拟MiTM场景,确认zip文件无法被篡改;最后检查动态加载的JS文件是否仅来自安全路径。

内容的提问来源于stack exchange,提问作者R sukumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:57:25