sigstore-go 是 Sigstore 生态系统中用于生成和验证签名 bundle 的 Go 语言库,Sigstore 通过透明日志和证书/密钥管理来保证软件供应链的完整性。在本漏洞中,开发者使用 ExpiringKey 机制包装了一个没有证书的自管理长期密钥,ExpiringKey 本应给密钥设置一个有效期窗口,使得只有在该窗口内生成的签名才被视为有效。然而,在 1.2.1 之前,sigstore-go 在验证 bundle 时,未将 bundle 的签名时间戳与该有效期窗口进行比较。因此,当攻击者获得了已过期的密钥材料(例如通过遗留副本或内部泄露),就能够在密钥过期之后仍然使用该密钥对 bundle 进行签名,而验证者仍会将其视为有效签名。这直接绕过了密钥过期策略,可导致攻击者向软件仓库或分发通道中注入带有有效签名的恶意制品,破坏供应链的信任根。该漏洞的 CVSS 向量为 CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N,基础分数为 3.1,属于低危。攻击路径为远程,但要求攻击者具备一定的权限且攻击复杂度较高,影响仅限于完整性,不泄露数据或导致可用性下降。官方已经在 sigstore-go v1.2.1 中通过增加签名时间戳与有效期窗口的比对来修复该问题。建议所有依赖 sigstore-go 的软件项目立即升级到修复版本,并审查当前使用的签名密钥是否存在过期未撤销的情况,同时考虑对签名验证日志进行审计,确保没有历史恶意 bundle 被接受。
💡 影响/原因: 该漏洞使过期密钥仍能签出通过验证的bundle,绕过密钥有效期控制,破坏Sigstore供应链完整性。攻击门槛较高,但影响核心信任验证,需优先升级修复。