Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObserve one valid AES-CBC-HMAC JWE
-
DeliveryHarvest its constant HMAC_K("") tag
-
ExploitForge arbitrary ciphertext, IV, header
-
ExecutionReattach tag, pass VerifyCompact
-
ImpactTamper recovered plaintext (bit-flip/padding oracle)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Integrity verification
|
| Exploitation Conditions | Exploitation is limited to JWEs using the AES-CBC-with-HMAC direct path - JweDirectEncryptorBlock / JweDirectDecryptorBlock routed through JweHmacVerifierImpl and HmacShaCryptor; AEAD/GCM modes (NewJweDirectEncryptorAead / NewJweDirectDecryptorAeadImpl) do NOT use this cryptor and are unaffected. The affected software is github.com/ThalesGroup/gose versions >=v0.9.0 through v0.13.0-rc1 (the vulnerable code was never published under github.com/eclipse-keypont/gose). The practical precondition is that the attacker must have observed at least one legitimately produced JWE under the target key to obtain the constant HMAC_K("") tag; no key knowledge, authentication, or user interaction is required (PR:N/UI:N). The chief limiting factor is deployment mode: environments using only the GCM/AEAD path are not exploitable, and the only complete fix requires changing the module import path (go get -u will not remediate), with avoidance of the CBC-HMAC path as the sole in-release workaround. |
| Impact | The signals point to a genuinely serious integrity flaw that nonetheless has a bounded real-world footprint. The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) and score of 8.8 describe a network-reachable, unauthenticated issue - consistent with the description, since VerifyCompact processes attacker-supplied compact JWEs with no key or credential knowledge required (PR:N). The impact profile VC:L/VI:H matches the mechanism: integrity is fully broken (the HMAC tag is the constant HMAC_K("") for every message under a key) while confidentiality is only partially affected via downstream padding-oracle/bit-flipping manipulation rather than a direct disclosure. The vuln.today Decision label is this_week, indicating prompt remediation rather than drop-everything emergency. KEV is NOT listed, so there is no confirmed active exploitation; no EPSS score is provided, so exploitation probability cannot be quantified from the input. A reproducer is present in the GHSA advisory (a unit test proving Hash(A)Hash(B)Hash(nil)), demonstrating the flaw, but it is not packaged as a working end-to-end network exploit. One material caveat to the AC:L rating: practical forgery requires the attacker to have first observed at least one legitimately produced JWE under the target key to learn the constant tag - a low but non-zero precondition. The net picture is a high-severity, low-prevalence issue: a real and urgent priority for the specific projects that use gose's AES-CBC-HMAC JWE path, but not a widespread internet-scale emergency given the library's niche adoption and the GCM path being unaffected. |
| Exploit ScenarioDerived | An attacker who has observed a single valid AES-CBC-HMAC JWE issued under a given key learns that its authentication tag is the message-independent constant HMAC_K(""). They then craft an arbitrary ciphertext, IV, and protected header, attach that same tag, and submit it; JweHmacVerifierImpl.VerifyCompact accepts it because both sides reduce to HMAC_K(""), allowing chosen-ciphertext tampering (bit-flipping) and padding-oracle-style manipulation of the recovered plaintext. A public PoC reference exists in the GHSA advisory as a reproducer test; it is not verified as working end-to-end exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
The AES-CBC-with-HMAC JWE path in Eclipse KeyPont gose (published as github.com/ThalesGroup/gose v0.9.0 through v0.13.0-rc1) provides no ciphertext integrity at all: HmacShaCryptor.Hash returned the MAC of the empty message for every input, so the authentication tag is constant per key and independent of the message. An unauthenticated remote attacker who has observed a single legitimately produced JWE under the target key can replay that tag onto arbitrary attacker-chosen header, IV and ciphertext and pass verification, enabling bit-flipping manipulation of the recovered plaintext and padding-oracle-style attacks; confidentiality alone is not broken. Only the CBC-HMAC direct encryption/decryption blocks are affected, AEAD/GCM modes do not use this cryptor, and the evaluator rates it AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N with no public exploit identified at time of analysis.
RemediationAI
Vendor-released patch: migrate to github.com/eclipse-keypont/gose v1.0.0-rc1 or later (upstream fixed in commit 97f9348; the advisory's upgrade example uses v1.0.0-rc3). Because the module path changed six weeks after the fix, there is no patched release on github.com/ThalesGroup/gose, which ends at the still-vulnerable v0.13.0-rc1; go get -u therefore will not remediate and the go.mod require line and all import paths must be rewritten (#!/diff: - github.com/ThalesGroup/gose v0.13.0-rc1, + github.com/eclipse-keypont/gose v1.0.0-rc3). Where migration cannot happen immediately, the only in-release workaround is to stop using the direct AES-CBC-HMAC path (NewJweDirectEncryptorBlock and NewJweDirectDecryptorBlock) and switch to the unaffected AEAD/GCM path (NewJweDirectEncryptorAead / NewJweDirectDecryptorAeadImpl) - a trade-off that changes the JWE algorithm and requires the peer to accept it, and any existing tokens must be re-issued, not merely re-verified. Any data already protected by an affected release must be treated as unauthenticated and re-encrypted under a patched version to obtain a real integrity guarantee. Advisory: https://github.com/eclipse-keypont/gose/security/advisories/GHSA-h6w5-722x-2h3m
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 implements JWE compact serialization (RFC 7516) using AES-CBC followed by HMAC. The HMAC primitive is HmacShaCryptor, a thin wrapper around Go's standard hash.Hash. Its Hash method called h.hash.Sum(input), but Go's hash.Hash.Sum(b) appends the digest of the currently written state to b and does not hash b; because the code never called Write(input) and never called Reset, the digest was always that of the empty input, and slicing the result at len(input) simply recovered that constant. The consequence is a per-key constant tag HMAC_K(""). This is CWE-354 (improper validation of integrity check value): the comparison in JweHmacVerifierImpl compares two values that are the same constant on both the honest and forged path, so integrity verification is a no-op. The HMAC gates CBC decryption, so once it is bypassed the CBC layer is exposed to raw attacker-chosen ciphertext, which is malleable and can be bit-flipped to manipulate the decrypted plaintext; the advisory notes CryptBlocks also panics on non-block-aligned lengths. The flaw was introduced with AES-CBC-then-HMAC support in commit b7b140e (2024-08-02) and first shipped in v0.9.0; it was fixed in commit 97f9348 by calling Reset, Write(input) and Sum(nil). AEAD/GCM code paths (NewJweDirectEncryptorAead / NewJweDirectDecryptorAeadImpl) never route through HmacShaCryptor and 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:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N
Network-reachable JWE verification needs no key or auth (PR:N) and only one observed tag (AC:L); integrity is fully forgeable (I:H) with limited plaintext exposure via padding oracle (C:L).
Primary rating from Vendor (eclipse).
CVSS VectorVendor: eclipse
Lifecycle Timeline
2DescriptionCVE.org
HmacShaCryptor.Hash never hashed its input. For any input it returned HMAC_K("") - the MAC of the empty message under the key. Every AES-CBC-HMAC JWE produced or verified by gose therefore carried an authentication tag that is constant per key and independent of the message, removing ciphertext integrity entirely.
Technical POC Analysis
CWE-354 (Improper Validation of Integrity Check Value), as classified in the report.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Eclipse KeyPont gose versions v0.9.0 through v0.13.0-rc1 (published as github.com/ThalesGroup/gose) contain a critical integrity flaw in their AES-CBC-with-HMAC JWE implementation, allowing an unauthenticated remote attacker to tamper with encrypted data. This undermines trust in any system using these versions for data protection, potentially leading to unauthorized modifications and data corruption. Leadership should prioritize remediation to prevent integrity breaches that could impact compliance and customer trust.
No vendor-released patch identified at time of analysis. Interim mitigations include disabling CBC-HMAC JWE mode if feasible, migrating to AEAD/GCM modes, implementing strict validation of JWE headers and ciphertexts, and monitoring for tampering attempts; consider using an alternative JWE library for critical data.
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 allDenial 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
Eclipse KeyPont gose (formerly github.com/ThalesGroup/gose) fails to enforce the JWS `crit` header: any token carrying a
EUVD-2026-108654
NVD
CVE.org
EPSS
GitHub
VulDB
Exploit-DB