ZIP 是世界上最古老也最普遍的文件格式之一——你电脑上的几乎每一个压缩文件、Office 文档、Android APK、Java JAR 都用 ZIP 作为容器。但 USENIX Security 2025 的这篇论文发现:ZIP 格式规范本身存在大量模糊之处,导致不同编程语言的 ZIP 解析器对同一个文件可以产生不同的解读。
研究者开发了差分模糊器 ZipDiff,系统性地测试了 50 个 ZIP 解析器(覆盖 19 种编程语言)。结果:几乎每一对解析器之间都存在某种解析歧义。 他们总结了 14 种解析歧义类型(10 种是首次发现)。
这件事的严重性在于——当一个 ZIP 文件被两种不同的解析器解读为两种不同的内容时,攻击者就获得了一个"语义鸿沟"。例如:
- 绕过安全邮件网关:邮件附件被网关的 ZIP 解析器视为"安全",但用户的邮件客户端解压出了不同的、恶意的内容
- 欺骗 VS Code 扩展签名验证:扩展包看起来通过了签名检查,但实际加载了未签名的恶意代码
- 篡改已签名的 JAR 文件:Spring Boot 的签名验证通过,但实际执行的代码已经被篡改
*核心洞见*:当多个人读同一份"规范"各自实现时,规范中的每个模糊之处都是一个潜在的安全漏洞。
[My ZIP isn't your ZIP / USENIX Security 2025]