flawopen.com/参考资料/Cosign 验证绕过
Cosign GHSA-fx35-mq7g-6g98:旧版 Bundle 验证绕过
想象一个场馆既检查门票,也核对官方证件上的姓名。存在漏洞的旧版 Bundle 路径可能把一个裸密钥误当成官方证件,验票通过却跳过姓名核验。签名在数学上可能有效,但所要求的工作流身份并未得到证明。
Cosign Blob 验证中失效的环节
GHSA-fx35-mq7g-6g98 影响 `cosign verify-blob` 和 `cosign verify-blob-attestation`:当无密钥验证使用身份和签发者参数(或其正则表达式变体)并读取旧版 JSON `--bundle` 时,如果 Bundle 的 `cert` 字段无法解析为 X.509 证书,受影响版本会回退为公钥加载。这会设置内部签名验证器,使后续流程跳过证书链验证和 `CheckCertificatePolicy`,因此身份与签发者约束没有生效。只要嵌入的公钥对应签名有效,验证就可能成功。Bundle 中的密钥还可能覆盖显式传入的 `--key`。公告指出,容器镜像验证和标准化 Sigstore protobuf Bundle 路径不受影响。暂无已知 CVE;上游公告评级为高危,CVSS 7.4、CWE-295 和 CWE-347。
验证绕过流程
CI 作业收到制品和旧版 JSON Bundle
制品和 Bundle 可能来自发布工作流、缓存、镜像或其他流水线输入;在策略检查通过前,接收作业必须将两者视为不可信。
存在漏洞的解析器在需要证书时接受了密钥
受影响版本在 X.509 解析失败后回退到公钥。这会设置签名验证器,并跳过无密钥验证中的证书策略执行。
签名校验成功,却未证明工作流身份符合要求
验证可能成功结束,但并未确认固定的证书身份和 OIDC 签发者。若流水线只判断退出状态,就可能继续使用未经授权的制品。
固定已修复的 Cosign 版本和签名者身份
两个示例都固定了相同的 GitHub Actions 精确身份和 OIDC 签发者。存在漏洞的命令使用受影响版本;解析旧版 JSON Bundle 时仍可能绕过这些检查。加固命令使用已修复版本和精确值参数,而非正则表达式。在 CI 中按经审核的版本和摘要固定 Cosign。命令只验证制品,不创建或展示恶意 Bundle。
# Risk: affected versions accept legacy JSON bundles in this path
# cosign v2.6.4 or earlier, or v3.1.2 or earlier
cosign verify-blob release.tar.gz \
--bundle release.sigstore.json \
--certificate-identity-regexp "^https://github\.com/acme/service/\.github/workflows/release\.yml@refs/heads/main$" \
--certificate-oidc-issuer-regexp "^https://token\.actions\.githubusercontent\.com$"
# Require Cosign v2.6.5+ or v3.1.3+ in the pinned CI toolchain
cosign verify-blob release.tar.gz \
--bundle release.sigstore.json \
--certificate-identity "https://github.com/acme/service/.github/workflows/release.yml@refs/heads/main" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"
修复与上线检查清单
- ✓盘点执行 `cosign verify-blob` 或 `cosign verify-blob-attestation` 的 CI 作业;检查实际运行的版本,包括下载的工具和容器镜像中的副本。
- ✓将受影响的 v2 安装升级到 v2.6.5+,将 v3 安装升级到 v3.1.3+;优先使用仍受支持的版本,并固定其来源与摘要。
- ✓为预期的签名工作流设置精确的 `--certificate-identity` 和 `--certificate-oidc-issuer`。避免接受无关身份的 `.*` 策略。
- ✓可行时将旧版 JSON Bundle 迁移到标准化 Sigstore Bundle 格式。公告指出该格式的验证路径不受影响;上线前应验证具体工具版本的行为。
- ✓将制品与 Bundle 的来源信息绑定;任何验证错误都应失败关闭;只有同一受控作业成功验证后才允许发布。
- ✓检查使用受影响版本验证的制品是否随后被发布或部署。用修复版 Cosign 和预期身份策略重新验证留存制品,并调查来源不一致。
- Sigstore Cosign security advisory GHSA-fx35-mq7g-6g98
- Cosign fix PR #5040 — removal of raw-key fallback
- Sigstore CI Quickstart — keyless signing and verification
- Cosign releases — patched versions