Skip to content

Verification bypass via public key in legacy bundle

High
Hayden-IO published GHSA-fx35-mq7g-6g98 Aug 6, 2026

Package

gomod github.com/sigstore/cosign/v2 (Go)

Affected versions

<= 2.6.4

Patched versions

v2.6.5
gomod github.com/sigstore/cosign/v3 (Go)
<= 3.1.2
v3.1.3

Description

Description

In cosign verify-blob and cosign verify-blob-attestation, keyless verification using --certificate-identity and --certificate-oidc-issuer (or their regular expression equivalents) can be bypassed when a legacy JSON --bundle is supplied.

Note that this does not affect verification with the newer standardized bundle format, the default in Cosign v3.

When reading the cert field of a legacy bundle, if the contents failed to parse as an X.509 certificate, Cosign silently fell back to loading the input as a raw public key and populated co.SigVerifier. In downstream verification, whenever co.SigVerifier is set, X.509 certificate chain validation and policy enforcement (CheckCertificatePolicy) are skipped. As a result, --certificate-identity and --certificate-oidc-issuer flags are ignored, and verification succeeds as long as the signature is cryptographically valid for the embedded public key.

Additionally, because the fallback unconditionally assigned to co.SigVerifier, if an operator passed an explicitly trusted --key alongside a legacy bundle containing a public key, the public key embedded in the bundle would overwrite the key provided via --key.

Affected Commands & Formats

  • Affected: cosign verify-blob and cosign verify-blob-attestation when verifying legacy JSON bundles (LocalSignedPayload).
  • Not Affected:
    • OCI container image verification (cosign verify and cosign verify-attestation).
    • Verification using the modern Sigstore protobuf bundle format (--new-bundle-format, e.g., application/vnd.dev.sigstore.bundle+json).

Impact

An attacker can bypass keyless identity and OIDC issuer pinning in cosign verify-blob and cosign verify-blob-attestation by shipping a legacy bundle whose cert field contains an arbitrary bare public key (-----BEGIN PUBLIC KEY-----) instead of a Fulcio X.509 certificate.

  • False assurance of identity enforcement: Verification completes with exit code 0 and reports Verified OK, causing operators or CI/CD pipelines to trust and consume artifacts signed by an unauthorized key.
  • Key override: If an operator explicitly specifies --key while verifying against a legacy bundle containing a bare public key, the attacker's bundle key silently overrides --key.

Patches

Upgrade to v3.1.3 or v2.6.5.

Workarounds

Adopt the Standardized Protobuf Bundle Format:

Migrate from legacy JSON bundles to the modern Sigstore protobuf bundle format (--new-bundle-format). The protobuf bundle verification engine is not affected by this vulnerability. You can upgrade bundles with cosign bundle create.

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
Required
Scope
Changed
Confidentiality
None
Integrity
High
Availability
None

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N

CVE ID

No known CVE

Weaknesses

Improper Certificate Validation

The product does not validate, or incorrectly validates, a certificate. Learn more on MITRE.

Improper Verification of Cryptographic Signature

The product does not verify, or incorrectly verifies, the cryptographic signature for data. Learn more on MITRE.

Credits