Vulnerability · CVE-2026-62374
SD JWT JS: Tampered disclosures silently dropped instead of rejected
Published Nov 2, 2026 · catalog updated Nov 2, 2026 · SD JWT JS: Tampered
Last checked Nov 7, 2026. A connected source was read within the last 7 days.
Check if you run it
No confirmed exploitation is on record for CVE-2026-62374. EPSS is 0.23%. Act only if a listed version of SD JWT JS: Tampered is installed.
Gaps on this record
- The stored product name is a package slug. The name on this page is taken from the title (SD JWT JS: Tampered).
- No vendor fix or required action is stored. Compare the linked advisory before you change production.
- Severity
- High—
- Known exploitation
- Not in CISA/VulnCheck KEV
- EPSS
- 0.23%
- Remediation
- Version ranges on file
- Affected products
- npm @sd-jwt · npm @sd-jwt/core · npm @sd-jwt/decode
## Summary When one Disclosure in an SD-JWT presentation is tampered so its digest no longer matches the Issuer-signed array, 0.19.0 does **not** reject the presentation. It silently drops the unmatched Disclosure and returns a **reduced claim set**, reporting success. The Issuer signature is untouched and valid. This is a downgrade/omission primitive. A malicious or curious **holder** can present a tampered Disclosure and have the relying party receive *fewer* claims than the credential carries, with no error surfaced. Where the relying party does **not** enforce key binding, an **in-transit (on-path) attacker** can achieve the same by mangling one Disclosure's bytes; where key binding **is** enforced, on-path tampering instead breaks the holder's KB-JWT binding (so it is rejected), and the downgrade is then exercisable by the key-bound holder — confirmed end-to-end with KB required. Two distinct tampering inputs converge on the same silent-drop sink: 1. **Genuinely non-decodable Disclosure** (broken base64url -> bytes that are not valid UTF-8, e.g. an injected lead byte). RFC 9901 §7.1 step 3 / §4.2.1 require rejection. instead **lossy-decodes** it: the / path substitutes U+FFFD (REPLACEMENT CHARACTER) for the invalid byte and recovers a syntactically valid disclosure (the gains a U+FFFD, claim = ). The recovered Disclosure then hashes to a digest **absent** from the signed array, so it is silently skipped. 2. **Tampered-but-still-valid-JSON Disclosure** (digest no longer matches ): same end state — the unmatched Disclosure is silently skipped. Two RFC 9901 MUSTs compound: - **§7.1 step 5 (primary):** "If any Disclosure was not referenced by digest value in the Issuer-signed JWT (directly or recursively via other Disclosures), the SD-JWT MUST be rejected." — instead silently dropped. - **§7.1 step 3 / §4.2.1 (secondary):** a non-base64url-JSON Disclosure MUST be rejected — the lenient lossy decode skips this check. Confirmed end-to-end through with a real ES256 is
Are you affected?
Enter the version you run. The result uses only the ranges stored on this record.
The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.
- npm @sd-jwtversion unspecified
- npm @sd-jwt/core<= 0.19.0
- npm @sd-jwt/decode<= 0.19.0
How to fix CVE-2026-62374
Upgrade
CVE-2026-62374 lists a fix boundary at 0.19.0. Compare the installed build with that boundary before you change production.
Version check
Affected <= 0.19.0
Advisory
Open the cve_org record and follow its fix.
Official advisories
What to do
Three questions, each answered from this record only. Confirm the vendor advisory before you patch.
Should you patch?
No confirmed exploitation is on record for CVE-2026-62374. EPSS is 0.23%. Act only if a listed version of SD JWT JS: Tampered is installed.
Which versions are affected?
Compare what you have installed with <= 0.19.0. Compare the installed version with the linked vendor advisory before you change production.
What should an analyst verify?
CWE-176. EPSS 0.23%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.
Code
The project this record applies to. Exploit listings stay in References.
Timeline
Detection, updates, and resolution for this record.
Nov 2, 2026 · GitHub Advisory Database
Detected
## Summary When one Disclosure in an SD-JWT presentation is tampered so its digest no longer matches the Issuer-signed array, 0.19.0 does **not** reject the presentation. It silently drops the unmatched Disclosure and returns a **reduced claim set**, reporting success. The Issuer signature is untouched and valid. This is a downgrade/omission primitive. A malicious or curious **holder** can present
Nov 2, 2026 · GitHub Advisory Database
Updated
## Summary When one Disclosure in an SD-JWT presentation is tampered so its digest no longer matches the Issuer-signed array, 0.19.0 does **not** reject the presentation. It silently drops the unmatched Disclosure and returns a **reduced claim set**, reporting success. The Issuer signature is untouched and valid. This is a downgrade/omission primitive. A malicious or curious **holder** can present
Sources
- CVE.orgVulnerability recordCVE-2026-62374
Official CVE identifier
cve.org - GitHub Advisory DatabasePackage advisoryGHSA-f9j6-8p6x-r9j6
SD JWT JS: Tampered disclosures silently dropped instead of rejected
github.com - GitLab Advisory DatabasePackage advisoryCVE-2026-62374
When one Disclosure in an SD-JWT presentation is tampered so its digest no longer matches the Issuer-signed _sd array, @sd-jwt/decode 0.19.0 does not reject the presentation. It silently drops the unmatched Disclosure and returns a reduced claim set, reporting success. The Issuer signature is untouched and valid. This is a downgrade/omission primitive. A malicious or curious holder can present a t
advisories.gitlab.com - Tenable CVE DatabaseVulnerability recordCVE-2026-62374
SD JWT JS is a JavaScript implementation of the Selective Disclosure JWT (SD-JWT) specification. In version 0.19.0 and earlier, , also used by , silently drops a tampered Disclosure whose digest no longer matches the Issuer-signed 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 co
tenable.com
References
Freshness
Last verified in this catalog Nov 6, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.
- GitHub Advisory DatabaseNov 7, 2026
- GitLab Advisory DatabaseNov 6, 2026
- Tenable CVE DatabaseNov 4, 2026
- CVE.orgNov 4, 2026