CVE Catalog

CVE-2026-62374

HighCVSS 7.1
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.23%

13th percentile - higher than 13% of all known CVEs

Summary

In @sd-jwt/decode (also used by @sd-jwt/core) version 0.19.0 and earlier, a tampered Disclosure whose digest no longer matches the Issuer-signed _sd array is silently dropped, returning a reduced claim set and reporting success. This affects both tampered Disclosures that remain valid JSON and those containing invalid UTF-8 bytes, which are substituted with U+FFFD replacement characters. It violates RFC 9901 section 7.1 step 5 and step 3 / section 4.2.1, which require rejection of unreferenced and invalid Disclosures.

Risk Assessment

A malicious holder can exploit this omission primitive to remove constraining claims (e.g., age, role, restriction), potentially changing an authorization decision without an error, especially if the relying party defaults to allowing access when such claims are absent. An on-path attacker can also tamper with a Disclosure when the relying party does not enforce key binding.

Recommendation

Update @sd-jwt/core to version 0.20.0, which fixes the issue; no patched version of the standalone @sd-jwt/decode package is identified. Additionally, enforce key binding on the relying party side and treat missing constraining claims as a denial rather than a default allow.

Related vulnerabilities

Original NVD description (English source)

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.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS