🔍 CVE-2026-62374

0.0
CVSS Score
UNKNOWN
2026-10-29
2026-10-30 19:39
✅ 완료

🇰🇷 한글 설명

SD-JWT JS 라이브러리 0.19.0 이하 버전의 @sd-jwt/decode는 발급자 서명이 유효한 상태에서도 다이제스트가 일치하지 않는 변조된 Disclosure를 조용히 무시하고 축소된 클레임 셋을 성공으로 반환합니다. 잘못된 UTF-8 바이트를 포함한 Disclosure도 U+FFFD 치환 문자로 복구되어 거부되지 않습니다. 이 버그는 @sd-jwt/core 0.20.0에서 수정되었습니다.

💡 쉬운 설명

디지털 신원 증명서에서 일부 정보 조각이 변조되어도 시스템이 오류 없이 나머지 정보만으로 인증을 통과시킬 수 있습니다. 나이나 권한 같은 조건 정보가 빠지면 접근 권한이 잘못 허용될 수 있습니다.

🇺🇸 원문 (English)

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.

📍 영향받는 시스템

@sd-jwt/decode 0.19.0 이하 및 @sd-jwt/core 0.19.0 이하 (@sd-jwt/core 0.20.0에서 수정됨)

⚔️ 공격 벡터

악의적인 홀더가 Disclosure를 변조하거나 잘못된 UTF-8 바이트를 삽입해 특정 클레임을 누락시키고, 검증 측이 이를 감지하지 못해 권한 판단이 바뀌도록 합니다.

🛡️ 대응 방법

@sd-jwt/core를 0.20.0 이상으로 업그레이드하고, 키 바인딩(KB-JWT)을 필수로 적용하며, 누락된 조건 클레임은 기본 허용이 아닌 기본 거부로 처리하십시오.

🔧 검증 코드

출력된 버전이 @sd-jwt/core 0.20.0 미만이거나 @sd-jwt/decode가 0.19.0 이하로 표시되면 취약하므로 업그레이드가 필요하며, 아무것도 출력되지 않으면 해당 패키지를 사용하지 않는 것입니다.

Shell / Script
npm ls @sd-jwt/core @sd-jwt/decode 2>/dev/null | grep -E 'sd-jwt'

💻 영향받는 소프트웨어

Oracle Java SE