{"id":"CVE-2026-89314","kind":"vulnerability","aliases":["CVE-2026-89314"],"related":[],"title":"JWK library: quadratic key_ops check lets a crafted JWKS stall CPU","description":"`jwkFields.CheckConsistency` detected duplicate `key_ops` entries with a pairwise nested loop, making validation cost grow with the **square** of the entry count. Because the check runs on every JWK and JWKS unmarshal, a modestly sized but hostile JWKS document could occupy a CPU core for many seconds.","summary":"The JWK parser checks for duplicate key_ops entries with a nested loop, so validation time grows with the square of the entry count. A hostile JWKS document with many key_ops values can keep a CPU core busy for many seconds on every unmarshal.","severity":"medium","cvss":6.9,"epss":0.00253,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["go-or-library-unknown","jwk","jwks","package","self-hosted"],"not_affected_if":["trusted-key-sources-only"],"how_to_check":"- unknown","fix":"- unknown","status":"open","published_at":"2026-10-23T09:17:07+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","triaged_at":"2026-10-25T03:38:36+00:00","updated_at":"2026-10-25T03:38:36+00:00","category":"package","confidence":0.5,"triage":{"at":"2026-10-25T03:38:36Z","model":"claude-haiku-5-5","output":{"fix":"- unknown","reach":"network","title":"JWK library: quadratic key_ops check lets a crafted JWKS stall CPU","impact":"low","summary":"The JWK parser checks for duplicate key_ops entries with a nested loop, so validation time grows with the square of the entry count. A hostile JWKS document with many key_ops values can keep a CPU core busy for many seconds on every unmarshal.","category":"package","nicknames":[],"who_cares":["jwk","jwks","go-or-library-unknown","self-hosted"],"confidence":0.5,"needs_auth":"unknown","worst_case":"A crafted JWKS document occupies a CPU core for many seconds","analyst_note":"Identify the affected library, versions and fixed release from the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-89314, since the sources given do not name them.","how_to_check":"- unknown","needs_analyst":true,"not_affected_if":["trusted-key-sources-only"],"who_is_affected":"Services that parse JWKS or JWK documents from sources they do not fully trust, such as remote key endpoints or user-supplied keys, are the ones exposed to a hostile document. Services that only parse their own locally configured keys are unlikely to see crafted input. The sources do not name the affected library or versions.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000582,"input_tokens":3374,"output_tokens":490,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-89314':15A,18A 'busi':68B 'check':6A,33B,99C 'core':67B,118C 'cost':88C 'could':114C 'count':53B,96C 'cpu':12A,66B,117C 'craft':9A 'cve':13A,16A 'detect':76C 'document':57B,113C 'duplic':35B,77C 'entri':38B,52B,80C,95C 'everi':73B,102C 'go':20B 'go-or-library-unknown':19B 'grow':46B,89C 'host':29B 'hostil':55B,111C 'jwk':1A,24B,31B,103C 'jwkfields.checkconsistency':75C 'jwks':10A,25B,56B,105C,112C 'keep':64B 'key':4A,36B,60B,78C 'let':7A 'librari':2A,22B 'loop':42B,85C 'make':86C 'mani':59B,70B,120C 'modest':108C 'nest':41B,84C 'occupi':115C 'op':5A,37B,61B,79C 'packag':26B 'pairwis':83C 'parser':32B 'quadrat':3A 'run':100C 'second':71B,121C 'self':28B 'self-host':27B 'size':109C 'squar':49B,92C 'stall':11A 'time':45B 'unknown':23B 'unmarsh':74B,106C 'valid':44B,87C 'valu':62B","nicknames":[],"mitigations":[],"who_affected":"Services that parse JWKS or JWK documents from sources they do not fully trust, such as remote key endpoints or user-supplied keys, are the ones exposed to a hostile document. Services that only parse their own locally configured keys are unlikely to see crafted input. The sources do not name the affected library or versions.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T09:17:07+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/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":"emo@eclipse.org","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-89314","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-89314","severity":null,"published_at":"2026-10-23T09:17:07+00:00","modified_at":"2026-10-23T19:30:07+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"epss","external_id":"CVE-2026-89314","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-89314","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+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"}