Skip to main content

Eclipse KeyPont gose CVE-2026-89313

| EUVDEUVD-2026-108633 MEDIUM
Use of Incorrectly-Resolved Name or Reference (CWE-706)
2026-10-23 eclipse
6.3
CVSS 4.0 · Vendor: eclipse
View

Attack ChainAIDerived

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

  1. Access
    Craft JWT with allowlisted issuer
  2. Exploit
    Set kid absent from multi-key JWKS
  3. Execution
    Get returns stale last key
  4. Impact
    Retired or wrong key silently accepted

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Incorrectly specified target
Exploitation Conditions

Requires three concrete conditions drawn from the advisory: (1) the TrustStore must be a JwksTrustStore backed by a JWKS document that holds more than one key (the rotation scenario), (2) the attacker-supplied compact JWT must set iss to a value already on the operator's issuer allowlist so foundIssuer is true, and (3) the JWT's kid header must name a key that is absent from that JWKS, so the lookup misses and the naked return ships the last-parsed key with err=nil. LIMITING FACTORS: this is not an authentication bypass - JwtVerifierImpl.Verify still enforces algorithm match and signature verification against the returned key, so a forged token signed by an unrelated key is still rejected; the practical impact is limited to broken kid-to-key binding affecting key rotation and any downstream authorization/routing/audit logic that trusts kid, or to direct external callers of the exported Get/TrustStore interface. Single-key JWKS deployments and consumers that re-check the returned key's Kid() against the requested kid are not exploitable.

Impact

This is a logic/key-selection flaw in the gose JOSE library (CWE-706), not a high-urgency emergency. The supplied CVSS 4.0 vector (AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N) correctly captures a network-reachable issue with high attack complexity and only Low integrity impact and no confidentiality or availability impact. There is a scoring conflict that must be noted: the input header states 6.3, but the Eclipse GHSA advisory and the same 4.0 vector actually compute to roughly 3.7 (Low), and the maintainer explicitly rates it Low - treat 6.3 as likely mis-entered and the Low rating as authoritative. The vuln.today decision label is 'this_month' (not act_now/emergency). It is NOT in CISA KEV, so there is no confirmed active exploitation, and no EPSS probability was provided. The advisory stresses this is explicitly NOT an authentication bypass: JwtVerifierImpl.Verify still checks algorithm and verifies the signature against whatever key it receives, so a token signed by an unrelated key is still rejected. The real-world residual risk is confined to key-rotation windows and to downstream logic that trusts the kid-to-key binding; combined with AC:H (needs a multi-key JWKS plus a token naming an absent kid) this is a genuine correctness/defense-in-depth fix to schedule, not a drop-everything patch.

Exploit ScenarioDerived

During legitimate key rotation when the JWKS holds several keys, an attacker submits a compact JWT whose iss matches an operator-allowlisted issuer and whose kid is absent from the current JWKS; JwksTrustStore.Get silently returns the last key in the document with err=nil, so a token that names a retired or not-yet-active key can still be validated against whichever key happens to be last. The Eclipse advisory describes an executed reproducer (an httptest JWKS server with two EC keys showing the wrong 'last' key returned for a non-existent kid), but no standalone weaponized exploit code is published. Because AC is High, exploitation depends on the specific multi-key/absent-kid condition rather than any default configuration.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 23, 2026

JwksTrustStore.Get in the Eclipse KeyPont gose JOSE library (formerly github.com/ThalesGroup/gose) can return the last key parsed from a JWKS document, with a nil error, when the caller asks for a kid that is not present in that document - so absent-key lookups silently succeed against the wrong key instead of failing as 'not found'. The flaw exists in every release from v0.7.5 through v1.0.0-rc3 of the eclipse-keypont module path, and in the deprecated ThalesGroup path up to its final tag v0.13.0-rc1; it is fixed in v1.0.0-rc4. It is not an authentication bypass: JwtVerifierImpl.Verify still enforces algorithm match and signature verification against whatever key it receives, so a token signed by an unrelated key is still rejected; the realistic impact is broken kid-to-key binding during key rotation and any downstream logic that treats kid as a trusted decision input, which is why the maintainers rate integrity impact Low with High attack complexity. There is no KEV listing and no public exploit code identified at time of analysis; the upstream advisory publishes a reproducer that demonstrates the wrong-key return against an httptest JWKS server, and the recommended handling is to fold the fix into a routine monthly patch cycle rather than an emergency response.

RemediationAI

Upgrade to github.com/eclipse-keypont/gose v1.0.0-rc4 or later, which contains the fix from commit 6f533d7 (merged as 692c25c) - a local variable in the JWK parse loop plus an explicit return nil, nil on the not-found path. Consumers still importing github.com/ThalesGroup/gose must change the module path in go.mod, not merely the version, because that path terminates at v0.13.0-rc1 and remains vulnerable; go get -u will not remediate it, and the dependency line has to be rewritten from github.com/ThalesGroup/gose v0.13.0-rc1 to github.com/eclipse-keypont/gose v1.0.0-rc4. Where an immediate upgrade is not possible, the documented workaround for code that calls TrustStore.Get directly is to compare the returned key's Kid() with the kid that was requested and to treat a mismatch as not-found - this costs an extra comparison per lookup and does nothing for callers that never perform it, so it is a stopgap rather than a fix. Deployments backed by single-key JWKS documents cannot hit the miss path at all and are not affected in practice, and deployments that never allowlist multiple issuers or rotate keys face materially reduced exposure; neither condition removes the need to patch, since the flaw lives in an exported API whose contract other code may rely on. Plan the upgrade within the current monthly remediation cycle rather than as an emergency change. Advisory: https://github.com/eclipse-keypont/gose/security/advisories/GHSA-v7r8-g6h9-99vv.

Affected VersionsENISA

Eclipse KeyPont - GOSE 0 <1.0.0-rc4
Eclipse KeyPont - GOSE 0.7.5 ≤0.13.0-rc1

Affected Packages

euvd eclipse_keypont_gose fix: 1.0.0-rc4

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 implementation of JOSE/JWT verification built around a pluggable TrustStore interface; JwksTrustStore implements it by fetching a JWKS document over HTTP, caching the parsed keys, and resolving a caller-supplied kid to a VerificationKey. The root cause is a Go language detail combined with CWE-706 (use of an incorrectly-resolved name or reference): Get was given named return values (vk VerificationKey, err error), and the cache-refresh loop wrote into that named vk on every iteration via vk, err = NewVerificationKey(jwk). When the subsequent lookup over store.keys found no key whose Kid() matched the requested kid, control fell through to a bare return, which shipped the last value assigned to vk - the final key in the JWKS array - together with the nil err left over from the successful parse. The lookup thus answers a question it did not verify, and the documented contract ('If no key is found nil is returned') is violated with no error signal for the caller to inspect. The trigger requires a multi-key JWKS (the key-rotation scenario the kid header exists to handle), an attacker-supplied compact JWT whose iss claim matches an operator-allowlisted issuer, and a kid header naming a key absent from that document; the advisory notes the affected code moved from jwks_truststore.go:109-128 to :98 and :116 as the file evolved, and that the fix commit (6f533d7, merged as 692c25c) addresses the class rather than the instance by replacing the naked return with an explicit return nil, nil and using a local variable in the parse loop. The same release additionally wraps the JWKS response body in an io.LimitReader, an unrelated hardening on the same code path.

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

Vendor (eclipse) PRIMARY 6.3 MEDIUM
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
vuln.today AI 3.7 LOW

Token is delivered over the network (AV:N) with no auth beyond an allowlisted iss (PR:N), but requires a multi-key JWKS and an absent kid (AC:H); only key-binding integrity is affected (I:L, C:N/A:N).

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

Primary rating from Vendor (eclipse).

CVSS VectorVendor: eclipse

Attack Vector
Network
Attack Complexity
High
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 23, 2026 - 09:16 EUVD

DescriptionCVE.org

JwksTrustStore.Get assigned each parsed key to the function's named return value while refreshing the JWKS cache. When the requested kid was not present, the trailing naked return handed the caller the last key in the JWKS document together with a nil error - a confidently wrong answer instead of "not found".

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Low
niche Go JOSE library (Eclipse KeyPont/gose), limited integrator footprint
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
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