Skip to main content

sigstore-go CVE-2026-54787

| EUVDEUVD-2026-51665 LOW
Use of a Key Past its Expiration Date (CWE-324)
2026-07-31 https://github.com/sigstore/sigstore-go GHSA-wqqc-jjcq-vfxm
3.1
CVSS 3.1 · Vendor: https://github.com/sigstore/sigstore-go
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Acquire expired long-lived signing key material
  2. Delivery
    Craft Sigstore bundle signed with expired key
  3. Exploit
    Submit bundle to vulnerable sigstore-go verifier
  4. Execution
    Verifier skips ExpiringKey timestamp validation
  5. Persist
    Bundle accepted as cryptographically valid
  6. Impact
    Key expiry security boundary bypassed

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Key rotation and expiry
Exploitation Conditions

Exploitation requires all of the following: (1) the target application uses sigstore-go's self-managed long-lived key workflow - the vulnerability does not affect any deployment using a certificate authority such as Fulcio; (2) the verifier is explicitly configured with a root.NewExpiringKey() wrapper encoding a validity start and end time for a public key; (3) the attacker possesses signing key material that is expired per the configured validity window but was at some point a genuine signing key for the system; (4) the attacker can cause a crafted bundle to be submitted for verification. Exploitation is limited by the AC:H prerequisite (acquiring expired key material is non-trivial), by the PR:L requirement (some authenticated access is needed to interact with the verification pipeline), and by the narrow deployment scope (self-managed long-lived key configuration is non-default and niche).

Impact

The CVSS 3.1 vector AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N yields a score of 3.1 (LOW), which accurately reflects the narrow impact here. Attack Complexity is High because an attacker must first obtain expired key material - a significant non-trivial prerequisite that limits opportunistic exploitation. PR:L indicates some level of authenticated access is required to submit bundles for verification. Impact is confined to Integrity:Low with no confidentiality or availability consequences. The vulnerability is not listed in the CISA KEV catalog, no standalone POC exploit has been released (only a test-case patch for reproduction), and no EPSS score was provided in the source data. Real-world risk is meaningful specifically for organizations that have adopted the long-lived key workflow in sigstore-go and depend on key expiry as a security boundary - for those teams, an attacker who has acquired a previously valid, now-expired signing key can present artifacts as validly signed indefinitely. For the broader ecosystem, the risk is low due to the non-default configuration requirement and the fact that the dominant Fulcio-based workflow is entirely unaffected.

Exploit ScenarioDerived

An attacker who previously held or has since obtained a signing key that was once valid under an ExpiringKey configuration (e.g., recovered from a past key compromise or insider leak) generates a Sigstore bundle signed with that expired key material. The attacker submits the bundle to a supply chain verification pipeline powered by sigstore-go, which calls Verifier.Verify(). On vulnerable versions, the verifier confirms the signature cryptographically but never checks whether the signing timestamp falls within the ExpiringKey's validity window, so the bundle is accepted as trustworthy despite the key's configured expiration having passed.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jul 31, 2026

sigstore-go versions up to and including 1.2.0 accept Sigstore bundles signed with expired long-lived public keys because the verifier omits the timestamp-validity check when using ExpiringKey-wrapped verifiers. An attacker who obtains expired signing key material can produce bundles that pass verification despite the key's configured expiry window, undermining supply chain integrity guarantees enforced by key rotation policies. This affects only the self-managed long-lived key workflow - standard Sigstore deployments using Fulcio certificate authorities are explicitly unaffected. No public exploit identified at time of analysis.

RemediationAI

Upgrade sigstore-go to v1.2.1 (https://github.com/sigstore/sigstore-go/releases/tag/v1.2.1), which enforces the signing-timestamp-to-key-validity-window check introduced in PR #642 (commit 4594ab4c779d08be1f4419803a8249188f35ed5f). If an immediate upgrade is not feasible, organizations using the long-lived key workflow should audit all ExpiringKey verifier configurations and treat any bundle verification result as potentially unreliable with respect to key expiry enforcement. Transitioning to the Fulcio certificate authority workflow eliminates the exposure entirely, as that path enforces validity through the certificate chain - though this is a significant architectural change with operational implications for key management. There is no in-place workaround that preserves the ExpiringKey API behavior without upgrading; the missing check cannot be compensated at the caller level because the validation logic is internal to the library's verification method.

Affected VersionsENISA

sigstore-go < 1.2.1

Affected Packages

go github.com/sigstore/sigstore-go fix: 1.2.1
euvd sigstore_go fix: 1.2.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

sigstore-go is the Go reference implementation of the Sigstore artifact signing and verification framework, identified by package path pkg:go/github.com/sigstore/sigstore-go. The vulnerability (CWE-324: Use of a Key Past its Expiration Date) resides in pkg/verify/signed_entity.go within the Verifier.Verify() method. The Sigstore protocol supports two signing workflows: (1) short-lived certificates issued by a certificate authority such as Fulcio, where expiry is enforced through the certificate chain, and (2) self-managed long-lived keys, where the operator wraps a public key verifier in a root.ExpiringKey type that explicitly encodes a validity start and end time. The bug is that the code path handling public-key-based bundles omitted a call to ValidAtTime() against the verified timestamps, meaning the validator accepted bundles regardless of whether the signing event fell within the key's configured validity window. The fix in PR #642 (commit 4594ab4c779d08be1f4419803a8249188f35ed5f) adds an explicit loop over verifiedTimestamps that returns an error when the signing time falls outside the ExpiringKey window, matching the API contract that was implied but not enforced.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/sigstore/sigstore-go) PRIMARY 3.1 LOW
AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 3.1 LOW

Attacker must first acquire expired key material (AC:H); some authenticated access needed to submit bundles (PR:L); impact is solely integrity-limited bypass of key expiry (I:L), no confidentiality or availability consequences.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/sigstore/sigstore-go).

CVSS VectorVendor: https://github.com/sigstore/sigstore-go

Attack Vector
Network
Attack Complexity
High
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

DescriptionCVE.org

sigstore-go fails to check signature timestamps against a signing key's validity period for self-managed long-lived keys without certificates.

Impact

To verify a bundle with a self-managed long-lived key, the key needs to be wrapped in an ExpiringKey type that implies expiration semantics:

go
signatureVerifier, _ := signature.LoadDefaultVerifier(publicKey)
expiredKey := root.NewExpiringKey(signatureVerifier, time.Unix(0, 0), time.Unix(1, 0))

Despite the API contract, the validator does not check the bundle signing time against the validity window. Attackers that obtain expired key materials may be able to sign bundles with those materials that are accepted despite a configured expiry date. This issue only impacts the long-lived signing key workflow, and not standard deployments involving a certificate authority.

Reproduction steps

Start from a sigstore-go checkout:

bash
git clone https://github.com/sigstore/sigstore-go.git
cd sigstore-go
git checkout 8ca80c47ef03d26ebf174db7c296700b075b2c16

Apply the [patch] containing the test case and associated materials:

bash
git apply sigstore-go-public-key-validity-test.patch

Run the test:

bash
go test ./pkg/verify -run TestPublicKeyValidityCheckedAgainstSignedTimestamp

On vulnerable code, the test fails because verification succeeds even though the trusted ExpiringKey is not valid at the signed timestamp:

text
--- FAIL: TestPublicKeyValidityCheckedAgainstSignedTimestamp
    signed_entity_test.go:602:
        	Error:      	An error is expected but got nil.

[patch]: https://github.com/user-attachments/files/28614520/sigstore-go-public-key-validity-test.patch

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Prevalence
Low
niche Go library for Sigstore supply chain signing, non-ubiquitous deployment
Threat Intel
1
1 sources
Social Media
3
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC CIRCL GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

16
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +16
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy