CVE-2026-39395Cosign 是一个用于容器和二进制文件的代码签名及透明度工具。在 3.0.6 和 2.6.3 版本之前,cosign verify-blob-attestation 功能存在逻辑缺陷。当处理格式错误的 payload 或不匹配的 predicate types 时,该工具可能会错误地报告“Verified OK”验证通过结果。对于旧格式的 bundle 和分离签名,这是由于 predicate 类型验证的错误处理逻辑缺陷导致的;而对于新格式的 bundle,predicate 类型验证则被完全绕过。
该漏洞的核心在于 Cosign 在处理证明验证时的逻辑错误。Cosign 使用 predicate types 来定义证明内容的类型(如 SLSA Provenance)。在受影响版本中,当调用 `verify-blob-attestation` 命令时,系统未能正确执行严格的类型检查。具体而言,对于旧格式的 bundle 和分离签名,验证逻辑在处理 predicate 类型验证的异常情况时存在缺陷,导致错误被忽略,从而返回了错误的成功状态。对于新格式的 bundle,验证机制存在重大缺陷,完全绕过了 predicate 类型的比对步骤。攻击者可以利用此漏洞构建一个包含恶意 payload 或伪装类型的证明文件。当受害者使用受影响的 Cosign 版本验证该文件时,尽管签名可能有效,但内容的语义类型并不符合预期,Cosign 仍会返回验证通过。