Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObserve one valid JWE
-
DeliveryForge _thales_aad length and reuse constant HMAC tag
-
ExploitSubmit to CBC-HMAC direct decryptor
-
ExecutionPass integrity check, reach unvalidated length
-
ImpactPanic or unbounded allocation (service DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Array index validation
|
| Exploitation Conditions | Exploitation requires the application to use the AES-CBC-HMAC direct decryption path specifically - NewJweDirectDecryptorBlock / JweDirectDecryptorBlock.Decrypt; the AEAD/GCM path (NewJweDirectDecryptorAeadImpl) carries no _thales_aad length header and is not affected. The attacker must supply a crafted JWE whose forged _thales_aad length field survives the HMAC integrity check. In isolation that check requires the MAC key (hence the scored AC:H), but on every affected release (v0.9.0 through v0.13.0-rc1) the chained GHSA-h6w5-722x-2h3m makes the HMAC tag constant and message-independent, so observing one valid JWE and reusing its tag is sufficient. Limiting factors: only the CBC-HMAC path is exposed; impact is restricted to availability (panic/OOM), no data is disclosed or altered; there is no in-release patch, so remediation requires migrating the module path to github.com/eclipse-keypont/gose v1.0.0-rc1+ (rc4 recommended). Interim workaround per the advisory: avoid NewJweDirectDecryptorBlock in favour of the AEAD/GCM path, and recover panics at the request boundary (this limits panic blast radius but does not address the unbounded allocation). |
| Impact | This is a medium-severity, availability-only defect (input CVSS 4.0 base 6.3: AV:N/AC:H/AT:N/PR:N/UI:N with VC:N/VI:N/VA:L), not a confidentiality or integrity issue - the advisory explicitly states confidentiality and integrity are unaffected because the failure occurs after decryption but before any plaintext is returned. The vuln.today decision label is 'this_month' rather than act_now/emergency, consistent with a denial-of-service-only impact. No EPSS score and no CISA KEV entry are present in the input, so there is no signal of widespread or confirmed active exploitation; the only exploitation evidence is a reproducer the Eclipse/GHSA advisory reports as executed against an affected build. The AC:H rating reflects the in-isolation precondition of possessing the HMAC MAC key, but the advisory is explicit that this precondition collapses in every affected release: the chained GHSA-h6w5-722x-2h3m makes the HMAC tag constant per key and message-independent, so an attacker who has observed one valid JWE can forge the _thales_aad header and reuse the tag without knowing the key. Net: a genuine, confirmed DoS on the AES-CBC-HMAC direct-decryption path whose real-world attack complexity is lower than the scored AC:H suggests, but whose overall priority is tempered by availability-only impact and a niche affected library. |
| Exploit ScenarioDerived | An attacker who has observed a single valid JWE forges the _thales_aad protected-header length field and - because the chained GHSA-h6w5-722x-2h3m makes the HMAC tag constant and message-independent - reuses the tag so the integrity check passes. The decryptor then reads an unvalidated 64-bit length and either panics (truncated field or length exceeding the decrypted block) or attempts an allocation up to 2^64-1 bytes, crashing or exhausting the service. The advisory documents an executed reproducer that forges the tag and triggers both the truncated-field and oversized-length failures. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
Denial of service in Eclipse KeyPont Gose affects the AES-CBC-HMAC direct decryption path (NewJweDirectDecryptorBlock) in Go module github.com/ThalesGroup/gose v0.9.0 through v0.13.0-rc1: an unvalidated 64-bit plaintext length from the _thales_aad protected header causes a nil dereference, a BigEndian.Uint64 panic on short input, an unbounded allocation, or a slice-bounds panic after the HMAC check. The advisory includes an executed reproducer and notes that the same 11 releases carry GHSA-h6w5-722x-2h3m, whose constant, message-independent HMAC tag lets an attacker who has seen one valid JWE reuse its tag so the length field is reachable without the MAC key; confidentiality and integrity are unaffected. Active exploitation is not confirmed (no CISA KEV data is provided), the advisory contains an executed reproducer for the panic and oversized-length behavior, and the vuln.today priority is this_month.
RemediationAI
Vendor-released patch: migrate to github.com/eclipse-keypont/gose v1.0.0-rc1 or later, with v1.0.0-rc4 recommended because it also resolves seven further findings published alongside this one; no patched release exists on github.com/ThalesGroup/gose, so go get -u will not remediate and the module path must be changed in go.mod, for example from github.com/ThalesGroup/gose v0.13.0-rc1 to github.com/eclipse-keypont/gose v1.0.0-rc4. If migration cannot happen immediately, avoid the AES-CBC-HMAC direct decryption path NewJweDirectDecryptorBlock and use the AEAD/GCM path NewJweDirectDecryptorAeadImpl, which does not carry a _thales_aad length header, and recover panics at the request boundary; panic recovery limits the blast radius of the panic modes but does not address the unbounded allocation, and switching paths also removes exposure to the chained GHSA-h6w5-722x-2h3m. Advisory: https://github.com/eclipse-keypont/gose/security/advisories/GHSA-4gj8-hg2r-gw6q.
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
JWE compact serialization is used by the library to carry encrypted content; the affected code is the direct AES-CBC-then-HMAC decryptor, which reads a plaintext length from the protected header's _thales_aad field (OtherAad.B) and passes it to binary.BigEndian.Uint64, make, and a slice expression without validating nil, minimum length, or upper bound. CWE-129 (Improper Validation of Array Index) is the root-cause class: the length is trusted before use, so a nil OtherAad dereferences, a field shorter than 8 bytes panics in BigEndian.Uint64, and a value exceeding the decrypted block triggers a slice-bounds panic while a value up to 2^64-1 drives an unbounded allocation. The integrity check that gates the field is HMAC-based; in isolation that would require the MAC key and explains the high attack complexity, but GHSA-h6w5-722x-2h3m in the same releases makes HmacShaCryptor.Hash return HMAC_K of the empty string for all inputs, so the tag is constant per key and message-independent. Only NewJweDirectDecryptorBlock is affected; NewJweDirectDecryptorAeadImpl uses AEAD/GCM and has no _thales_aad length header. The assessed impact is availability-only (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L; input CVSS 4.0 base 6.3), and the feed's Information Disclosure tag is not supported by the advisory's statement that confidentiality and integrity are unaffected.
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:N/VA:L/SC:N/SI:N/SA:N
Network-reachable crafted JWE (AV:N), availability-only panic/OOM (A:L, C:N/I:N); AC:H reflects the in-isolation need for the MAC key, though the chained GHSA collapses it in practice.
Primary rating from Vendor (eclipse).
CVSS VectorVendor: eclipse
Lifecycle Timeline
1DescriptionCVE.org
JweDirectDecryptorBlock.Decrypt read a 64-bit plaintext length from the _thales_aad protected-header field and used it without any validation. A truncated field panics binary.BigEndian.Uint64, an oversized value drives an unbounded allocation, and a value larger than the decrypted block panics with a slice-bounds error.
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
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 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
Eclipse KeyPont gose (formerly github.com/ThalesGroup/gose) fails to enforce the JWS `crit` header: any token carrying a
EUVD-2026-108652
NVD
CVE.org
EPSS
GitHub
Exploit-DB