{"id":"CVE-2026-65632","kind":"vulnerability","aliases":["CVE-2026-65632"],"related":[],"title":"jose (Erlang): ECDSA JWS signatures accepted in non-canonical lengths","description":"The jose library accepts ECDSA (ES256, ES256K, ES384, and ES512) JWS signatures of a non-canonical length. When verifying an ECDSA signature, jose_jwk_kty_ec:verify/4 in src/jwk/jose_jwk_kty_ec.erl splits the raw signature in half by its actual byte length (split_binary(Signature, byte_size(Signature) div 2)) instead of enforcing the fixed length required by RFC 7518 §3.4, and then decodes each half with crypto:bytes_to_integer/1, which ignores leading zero bytes.\n\nAs a result, an attacker who holds one valid token can prepend leading zero bytes to each of the R and S halves to produce longer signatures that still split evenly and decode to the same (r, s) pair, so many distinct signature byte strings all verify against the same key (signature malleability). This does not allow forging new payloads or impersonating a signer, because the underlying (r, s) values are unchanged. It does defeat any security control that assumes a valid token or its signature is unique, such as token-revocation-by-hash, replay or idempotency caches, and deduplication logic.\n\nThis issue affects jose: from 1.0.0 before 1.11.13.","summary":"The Erlang jose library accepts ECDSA JWS signatures padded with extra leading zero bytes, so one valid token has many distinct byte-string signatures that all verify. An attacker who holds a valid token can create new encodings of it, which defeats controls that treat a token or its signature as unique, such as revocation by hash or replay caches, but cannot forge a new payload or impersonate the signer.","severity":"medium","cvss":5.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["authentication","elixir","erlang","jose","jwt","package"],"not_affected_if":["no-ecdsa-jws","no-signature-based-dedup","rsa-or-hmac-only"],"how_to_check":"- Find the jose version in the project's lockfile or `rebar.lock` and check whether it is between `1.0.0` and `1.11.12`\n- Check whether any revocation list, replay cache or deduplication logic keys on a hash of the raw JWS signature","fix":"- Upgrade the jose library to `1.11.13` or later\n- Until then, do not rely on hashing the raw signature bytes as a unique token identifier","status":"open","published_at":"2026-10-26T20:17:59+00:00","first_seen_at":"2026-10-26T20:50:18+00:00","triaged_at":"2026-10-26T20:51:56+00:00","updated_at":"2026-10-26T20:51:56+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-26T20:51:56Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade the jose library to `1.11.13` or later\n- Until then, do not rely on hashing the raw signature bytes as a unique token identifier","reach":"network","title":"jose (Erlang): ECDSA JWS signatures accepted in non-canonical lengths","impact":"low","summary":"The Erlang jose library accepts ECDSA JWS signatures padded with extra leading zero bytes, so one valid token has many distinct byte-string signatures that all verify. An attacker who holds a valid token can create new encodings of it, which defeats controls that treat a token or its signature as unique, such as revocation by hash or replay caches, but cannot forge a new payload or impersonate the signer.","category":"package","nicknames":[],"who_cares":["erlang","elixir","jose","jwt","authentication"],"confidence":0.8,"needs_auth":"yes","worst_case":"Attacker creates many distinct valid signatures for one token, bypassing hash-based revocation.","analyst_note":"","how_to_check":"- Find the jose version in the project's lockfile or `rebar.lock` and check whether it is between `1.0.0` and `1.11.12`\n- Check whether any revocation list, replay cache or deduplication logic keys on a hash of the raw JWS signature","needs_analyst":false,"not_affected_if":["no-ecdsa-jws","rsa-or-hmac-only","no-signature-based-dedup"],"who_is_affected":"Applications written in Erlang or Elixir that use the jose library to verify ES256, ES256K, ES384 or ES512 JWS tokens are affected. The risk is concentrated in systems that use the token signature as an identifier for revocation, replay prevention or deduplication; systems that only check the payload claims and expiry are not meaningfully exposed.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"unknown"},"cost_usd":0.000688,"input_tokens":3631,"output_tokens":650,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-65632':14A,17A '1.0.0':277C '1.11.13':279C '2':143C '3.4':154C '7518':153C 'accept':6A,28B,98C 'actual':133C 'affect':274C 'allow':226C 'assum':249C 'attack':53B,174C 'authent':18B 'binari':137C 'byte':37B,46B,134C,139C,162C,169C,184C,213C 'byte-str':45B 'cach':84B,268C 'cannot':86B 'canon':10A,111C 'control':67B,247C 'creat':60B 'crypto':161C 'cve':12A,15A 'decod':157C,202C 'dedupl':270C 'defeat':66B,244C 'distinct':44B,211C 'div':142C 'ec':121C 'ecdsa':3A,29B,99C,116C 'elixir':19B 'encod':62B 'enforc':146C 'erlang':2A,20B,25B 'es256':100C 'es256k':101C 'es384':102C 'es512':104C 'even':200C 'extra':34B 'fix':148C 'forg':87B,227C 'half':130C,159C 'halv':192C 'hash':81B,264C 'hold':55B,176C 'idempot':267C 'ignor':166C 'imperson':92B,231C 'instead':144C 'integer/1':164C 'issu':273C 'jose':1A,21B,26B,96C,118C,275C 'jwk':119C 'jws':4A,30B,105C 'jwt':22B 'key':220C 'kti':120C 'lead':35B,167C,182C 'length':11A,112C,135C,149C 'librari':27B,97C 'logic':271C 'longer':195C 'malleabl':222C 'mani':43B,210C 'new':61B,89B,228C 'non':9A,110C 'non-canon':8A,109C 'one':39B,177C 'packag':23B 'pad':32B 'pair':208C 'payload':90B,229C 'prepend':181C 'produc':194C 'r':189C,206C,237C 'raw':127C 'replay':83B,265C 'requir':150C 'result':172C 'revoc':79B,262C 'rfc':152C 'secur':246C 'signatur':5A,31B,48B,74B,106C,117C,128C,138C,141C,196C,212C,221C,255C 'signer':94B,233C 'size':140C 'split':125C,136C,199C 'src/jwk/jose_jwk_kty_ec.erl':124C 'still':198C 'string':47B,214C 'token':41B,58B,71B,179C,252C,261C 'token-revocation-by-hash':260C 'treat':69B 'unchang':241C 'under':236C 'uniqu':76B,257C 'valid':40B,57B,178C,251C 'valu':239C 'verifi':51B,114C,216C 'verify/4':122C 'zero':36B,168C,183C","nicknames":[],"mitigations":[],"who_affected":"Applications written in Erlang or Elixir that use the jose library to verify ES256, ES256K, ES384 or ES512 JWS tokens are affected. The risk is concentrated in systems that use the token signature as an identifier for revocation, replay prevention or deduplication; systems that only check the payload claims and expiry are not meaningfully exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T20:17:59+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-65632","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-65632","severity":null,"published_at":"2026-10-26T20:17:59+00:00","modified_at":"2026-10-26T20:17:59+00:00","first_seen_at":"2026-10-26T20:50:18+00:00","fetched_at":"2026-10-26T20:50:18+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}