CVE-2026-89317: gose JWS critical header bypass in JWT verification

CVE-2026-89317 · Severity: info · Published 2026-10-23

gose is a Go cryptographic library used to verify digitally signed tokens. The library failed to enforce RFC 7515 requirements for critical header parameters, allowing tokens with unimplemented mandatory constraints to be silently accepted. This enables token replay attacks across security contexts—for example, a token marked as requiring proof-of-possession or revocation checks could be used where these constraints were not properly validated.

Technologies: Eclipse KeyPont Gose, Thales Gose. Vendors: Eclipse KeyPont, Thales.

Quick answers

Is CVE-2026-89317 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-89317 being exploited in the wild.
How severe is CVE-2026-89317?
Informational severity, published 23 October 2026.
Which products and versions are affected?
Eclipse KeyPont Gose prior to 1.0.0-rc4; Thales Gose 0.7.3 through 0.13.0-rc1.
Is there a fix for CVE-2026-89317?
Yes: fixed in eclipse-keypont/gose 1.0.0-rc4 or later; github.com/ThalesGroup/gose users must migrate to github.com/eclipse-keypont/gose v1.0.0-rc4. Until then: Inspect the decoded protected header before calling Verify and reject any token whose `crit` member is present and non-empty.</anigation> <parameter name="timeline">[ { "kind": "disclosed", "at": "2026-09-01" }, { "kind": "advisory", "at": "2026-10-23" } ] Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-89317 attacked?
It is attacked over the network, in a software library.
Am I affected by CVE-2026-89317?
Check whether you run Eclipse KeyPont Gose or Thales Gose at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • Fixed in: eclipse-keypont/gose 1.0.0-rc4 or later; github.com/ThalesGroup/gose users must migrate to github.com/eclipse-keypont/gose v1.0.0-rc4

Inspect the decoded protected header before calling Verify and reject any token whose `crit` member is present and non-empty.</anigation> <parameter name="timeline">[ { "kind": "disclosed", "at": "2026-09-01" }, { "kind": "advisory", "at": "2026-10-23" } ]

Technical details

The vulnerability is a missing implementation check: JwtVerifierImpl.Verify parsed the JWS `crit` header field but never validated it, violating RFC 7515 §4.1.11 which requires rejection of JWS tokens with critical extension parameters the receiver does not support. Since gose implements no header extensions, any non-empty `crit` value should have been rejected. The attack vector is cross-context replay: an attacker with a legitimately signed token carrying critical constraints (e.g., RFC 7797 b64:false or RFC 7800 cnf proof-of-possession) can present it to a gose verifier that ignores these constraints.

Affected products

  • Thales gose 0.7.3 through 0.13.0-rc1
  • Eclipse Keypont gose prior to 1.0.0-rc4

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.