SD JWT JS silently drops tampered disclosures
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- None
- Impact type
- —
- Confidentiality · integrity · availability
- None · High · None
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub.
Summary
In @sd-jwt/core and @sd-jwt/decode through 0.19.0, the decoder silently drops a Disclosure whose digest no longer matches the Issuer-signed _sd array and returns a reduced claim set without an error (CWE-754). The TextDecoder and Buffer decoding path replaces malformed UTF-8 in a Disclosure with U+FFFD instead of rejecting it. A malicious holder, or an on-path attacker where key binding is not enforced, can remove claims while the Issuer signature still verifies, which can change an authorization decision when missing claims default to allowing access.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the CNA
SD JWT JS is a JavaScript implementation of the Selective Disclosure JWT (SD-JWT) specification. In version 0.19.0 and earlier, `@sd-jwt/decode`, also used by `@sd-jwt/core`, silently drops a tampered Disclosure whose digest no longer matches the Issuer-signed `_sd` array and returns a reduced claim set, reporting success while the Issuer signature remains valid. Both a tampered Disclosure that remains valid JSON and a Disclosure containing invalid UTF-8 bytes reach this silent-drop behavior. In the latter case, the `TextDecoder / Buffer` decoding path substitutes U+FFFD replacement characters, recovering syntactically valid disclosure data instead of rejecting the malformed input. This violates RFC 9901 section 7.1 step 5, which requires rejection of unreferenced Disclosures, and section 7.1 step 3 / section 4.2.1, which require rejection of invalid Disclosures. A malicious holder can exploit this omission primitive, including through `SDJwtInstance.verify()` when key binding is required. An on-path attacker can also tamper with a Disclosure when the relying party does not enforce key binding; enforced key binding rejects on-path tampering because it invalidates the KB-JWT `sd_hash` binding. If the relying party defaults to allowing access when a constraining age, role, or restriction claim is absent, the silent claim reduction can change an authorization decision without an error. This issue is fixed in `@sd-jwt/core` version 0.20.0; no patched version of the standalone `@sd-jwt/decode` package is identified.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- Yes
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| openwallet-foundation | @sd-jwt/core | up to 0.19.0 | — | No fix listed | CNA |
| openwallet-foundation | @sd-jwt/decode | up to 0.19.0 | — | No fix listed | CNA |
| — | @sd-jwt/decode (npm) | up to 0.19.0 | — | No fix listed | GHSA-f9j6-8p6x-r9j6 |
| — | @sd-jwt/core (npm) | before 0.20.0 | 0.20.0 | Patch available | GHSA-f9j6-8p6x-r9j6 |
- @sd-jwt/core Vendoropenwallet-foundation Affected up to 0.19.0 Fixed in — No fix listed CNA
- @sd-jwt/decode Vendoropenwallet-foundation Affected up to 0.19.0 Fixed in — No fix listed CNA
- @sd-jwt/decode (npm) Vendor— Affected up to 0.19.0 Fixed in — No fix listed GHSA-f9j6-8p6x-r9j6
- @sd-jwt/core (npm) Vendor— Affected before 0.20.0 Fixed in 0.20.0 Patch available GHSA-f9j6-8p6x-r9j6
Remediation
Update @sd-jwt/core to version 0.20.0. The sources list no fixed version for @sd-jwt/decode.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
- Fix · GHSA-f9j6-8p6x-r9j6 @sd-jwt/core (npm) Fixed in 0.20.0 Advisory →
Vendor assessments
Timeline
- 2026-10-29 Threatist record created from CVE-2026-62374
- 2026-10-31 Priority changed: MEDIUM → LOW
- 2026-11-02 Alias added: GHSA-f9j6-8p6x-r9j6
- 2026-11-02 Fix available: npm/@sd-jwt/[email protected] · GHSA-f9j6-8p6x-r9j6
- 2026-11-02 CVSS score added · GHSA-f9j6-8p6x-r9j6
- 2026-11-02 Weakness changed · GHSA-f9j6-8p6x-r9j6
- 2026-11-02 5 new references · GHSA-f9j6-8p6x-r9j6
- 2026-11-04 CISA SSVC decision points changed
- 2026-11-04 Priority changed: LOW → HIGH
- 2026-11-06 Affected versions changed · Red Hat
- 2026-11-06 CVSS score added · Red Hat
References
Other 4
Sources
- CVE-2026-62374 · CVE Program
- CVE-2026-62374 · NVD
- FIRST EPSS
- GHSA-f9j6-8p6x-r9j6 · GitHub Advisory Database · CC BY 4.0
- CVE-2026-62374 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences