Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain issuer-signed token bearing crit
-
ExploitReplay to gose-backed verifier in new context
-
ExecutionVerifier validates signature, ignores crit
-
ImpactIssuer-mandated constraint silently bypassed
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | Requires a trusted issuer to actually emit JWS tokens carrying a non-empty |
| Impact | Signals diverge in a way that must be read carefully. The CVSS 4.0 vector (AV:N/AC:H/AT:N/PR:N/UI:N, VI:L only, 6.3 Medium) implies a remote, unauthenticated attacker, but the Eclipse/GHSA advisory explicitly contradicts the PR:N reading: the |
| Exploit ScenarioDerived | A trusted issuer signs a JWS whose protected header carries a non-empty |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
Eclipse KeyPont gose (formerly github.com/ThalesGroup/gose) fails to enforce the JWS crit header: any token carrying a non-empty crit array should be rejected per RFC 7515 §4.1.11 because gose implements no header extensions, yet affected verifiers accept such tokens and report successful verification. Because crit lives inside the signed protected header, this is not reachable by an unauthenticated attacker without the signing key; the realistic risk is cross-context replay, where a trusted issuer constrains a token's use with a critical extension (RFC 7797 b64:false, RFC 7800 cnf, or an ecosystem must-revoke-check) and a gose-backed verifier silently drops that mandatory constraint. Signatures and claims remain authentic, so integrity impact is limited; no public exploit code is identified at time of analysis and the issue is not in CISA KEV. Fixed in eclipse-keypont/gose v1.0.0-rc4 (commit be2277b, merged as 692c25c); the legacy ThalesGroup module path ends at v0.13.0-rc1 and remains vulnerable.
RemediationAI
Upgrade to github.com/eclipse-keypont/gose v1.0.0-rc4 or later, which is the first release containing the fix (commit be2277b, merged as 692c25c); the advisory at https://github.com/eclipse-keypont/gose/security/advisories/GHSA-445r-fpvv-hgwc documents the change. Consumers still on github.com/ThalesGroup/gose must change the module path rather than bump the version, since that path terminates at v0.13.0-rc1 and carries a //Deprecated: directive, so go get -u will not remediate; apply the diff from github.com/ThalesGroup/gose v0.13.0-rc1 to github.com/eclipse-keypont/gose v1.0.0-rc4. Be aware of the deliberate behaviour change: any existing consumer that sends crit will now receive ErrCritHeaderNotSupported instead of a successful verification, which is the RFC-specified outcome but a compatibility break for anyone relying on the previous permissiveness. Where upgrading is not immediately possible, the advisory's stated workaround is to inspect the decoded protected header before calling Verify and reject any token whose crit member is present and non-empty; this must be applied at every call site, including those using the jose layer directly, since the upstream check was deliberately placed in jose.Jwt.Verify to cover all entry points. The separate gap in jose.JweProtectedHeader (no Crit field, RFC 7516 §4.1.13) is tracked separately and is not remediated by this upgrade.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
gose is a Go JOSE/JWT library. jose.JwsHeader declares Crit []string and the field is populated during JSON unmarshalling of the JWS protected header, but the value is never consulted by JwtVerifierImpl.Verify in jwt_verifier.go, which only checks nbf, exp, audience, kid, alg and the signature. RFC 7515 §4.1.11 makes any listed critical extension parameter that the recipient does not understand and support a reason to declare the JWS invalid; gose supports zero extensions, so every non-empty crit should fail and none did. The root cause is CWE-20 (improper input validation), with the advisory additionally classifying it as CWE-347 (improper verification of cryptographic signature) and CWE-1288 (improper validation of consistency within input). The upstream fix adds if len(jwt.Header.Crit) > 0 { return ErrCritHeaderNotSupported } inside jose.Jwt.Verify, which Jwt.Unmarshal calls, so the rejection applies to every entry point including direct use of the jose layer and cannot be bypassed by choosing a lower-level API. Because gose understands no extensions, the additional RFC checks for empty arrays, duplicates, or registered parameter names are subsumed by rejecting any non-empty crit. A related but separate gap: jose.JweProtectedHeader has no Crit field at all, so the RFC 7516 §4.1.13 equivalent is unrepresentable and is not addressed by this fix. Exploitation prerequisites are narrow: a trusted issuer must actually emit tokens with a non-empty crit naming a security-relevant constraint, and an adversary must legitimately obtain such a token in one context and replay it to a gose-backed verifier in another; without the signing key crit cannot be injected or altered, and the assessment records integrity impact only (VC:N/VI:L/VA:N in the published vector; assessed CVSS:3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N). The trigger is only exercising the accepted-but-unenforced header path; no memory-safety or injection mechanism is involved.
Know when Eclipse Keypont Gose gets its next vulnerability
- 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
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Token is presented to the verifier over the network (AV:N) with no verifier-side privileges (PR:N), but exploitation needs an issuer-signed crit-bearing token replayed cross-context (AC:H); only a mandated constraint is dropped, so I:L, C/A:N.
Primary rating from Vendor (eclipse).
CVSS VectorVendor: eclipse
Lifecycle Timeline
1DescriptionCVE.org
gose parsed the JWS crit header into JwsHeader.Crit and then never read it. RFC 7515 §4.1.11 requires a recipient to reject a JWS whose listed critical extension parameters it does not understand. gose implements no header extensions, so every token carrying a non-empty crit should have been rejected - and none were.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Eclipse Keypont Gose
View allThe AES-CBC-with-HMAC JWE path in Eclipse KeyPont gose (published as github.com/ThalesGroup/gose v0.9.0 through v0.13.0-
Denial of service in Eclipse KeyPont's `gose` JOSE/JWT Go library: `JwtClaims.MarshalJSON` builds a runtime struct with
CPU exhaustion in the Go JOSE library Eclipse KeyPont gose (formerly github.com/ThalesGroup/gose) allows a hostile JWK/J
Denial of service in the Eclipse Keypont gose Go JWE library (published historically as github.com/ThalesGroup/gose) whe
Eclipse KeyPont GoSE's JWE decryptor panics instead of returning an error when a compact JWE carries an incorrectly size
Denial of service in Eclipse KeyPont Gose affects the AES-CBC-HMAC direct decryption path (NewJweDirectDecryptorBlock) i
Denial of service in Eclipse KeyPont gose occurs when a JWK declares kty EC with a non-EC alg and is passed directly to
JwksTrustStore.Get in the Eclipse KeyPont gose JOSE library (formerly github.com/ThalesGroup/gose) can return the last k
EUVD-2026-108649
NVD
CVE.org
EPSS
GitHub
Exploit-DB