{"id":"CVE-2026-120222","kind":"vulnerability","aliases":["CVE-2026-120222"],"related":[],"title":"undici: a malicious server can crash Node.js clients via cache replay","description":"undici is an HTTP client for Node.js. In versions 7.0.0 through 7.30.1 and 8.0.0 through 8.12.3, when the cache interceptor is composed with a downstream handler that throws during response processing (such as the built-in dump interceptor exceeding its maxSize, or the decompress interceptor rejecting more than five Content-Encoding values), a throw raised asynchronously while a cached response is replayed escapes as an uncaught exception or unhandled promise rejection and terminates the Node.js process. A malicious or compromised HTTP server can crash any such client by serving a cacheable response that triggers the throw on replay, including on a 304 revalidation of a stale entry, so the impact is availability only. The issue is fixed in undici 7.30.2 and 8.12.4, and users should upgrade to one of those versions or later. As a workaround, avoid composing the cache interceptor with a response handler that throws during response processing until upgrading.","summary":"undici, the HTTP client library for Node.js, crashes the whole process when the cache interceptor is combined with a handler that throws during response processing and a cached response is replayed. A malicious or compromised HTTP server can trigger this by serving a cacheable response, causing a denial of service with no code execution.","severity":"medium","cvss":5.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["node.js","npm","package","undici"],"not_affected_if":["default-config","no-cache-interceptor"],"how_to_check":"- Check the installed undici version with `npm ls undici` in the project.\n- Look for use of the cache interceptor combined with the dump or decompress interceptors in the client setup.","fix":"- Upgrade undici to `7.30.2` for the 7.x line.\n- Upgrade undici to `8.12.4` for the 8.x line.","status":"open","published_at":"2026-11-06T10:16:36+00:00","first_seen_at":"2026-11-06T10:40:56+00:00","triaged_at":"2026-11-06T10:41:21+00:00","updated_at":"2026-11-06T10:41:21+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-06T10:41:21Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade undici to `7.30.2` for the 7.x line.\n- Upgrade undici to `8.12.4` for the 8.x line.","reach":"internet","title":"undici: a malicious server can crash Node.js clients via cache replay","impact":"low","summary":"undici, the HTTP client library for Node.js, crashes the whole process when the cache interceptor is combined with a handler that throws during response processing and a cached response is replayed. A malicious or compromised HTTP server can trigger this by serving a cacheable response, causing a denial of service with no code execution.","audience":"developers","category":"package","nicknames":[],"who_cares":["node.js","undici","npm"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"remote server crashes the Node.js process, causing denial of service","analyst_note":"","how_to_check":"- Check the installed undici version with `npm ls undici` in the project.\n- Look for use of the cache interceptor combined with the dump or decompress interceptors in the client setup.","plain_action":"","needs_analyst":false,"not_affected_if":["no-cache-interceptor","default-config"],"who_is_affected":"Applications that use undici's cache interceptor composed with the dump interceptor (with maxSize) or the decompress interceptor, and that fetch from servers that may be malicious or compromised, are exposed. A process crash is the impact; the sources do not describe data access. Projects that do not use the cache interceptor or do not compose it with those handlers can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000724,"input_tokens":4432,"output_tokens":561,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-120222':14A,17A '-2026':13A,16A '304':179C '7.0.0':85C '7.30.1':87C '7.30.2':197C '8.0.0':89C '8.12.3':91C '8.12.4':199C 'asynchron':133C 'avail':189C 'avoid':214C 'built':111C 'built-in':110C 'cach':10A,35B,49B,94C,136C,217C 'cacheabl':65B,168C 'caus':67B 'client':8A,25B,80C,164C 'code':74B 'combin':38B 'compos':97C,215C 'compromis':56B,157C 'content':127C 'content-encod':126C 'crash':6A,29B,161C 'cve':12A,15A 'decompress':120C 'denial':69B 'downstream':100C 'dump':113C 'encod':128C 'entri':184C 'escap':140C 'exceed':115C 'except':144C 'execut':75B 'five':125C 'fix':194C 'handler':41B,101C,222C 'http':24B,57B,79C,158C 'impact':187C 'includ':176C 'interceptor':36B,95C,114C,121C,218C 'issu':192C 'later':210C 'librari':26B 'malici':3A,54B,155C 'maxsiz':117C 'node.js':7A,18B,28B,82C,152C 'npm':19B 'one':205C 'packag':20B 'process':32B,46B,106C,153C,227C 'promis':147C 'rais':132C 'reject':122C,148C 'replay':11A,52B,139C,175C 'respons':45B,50B,66B,105C,137C,169C,221C,226C 'revalid':180C 'serv':63B,166C 'server':4A,58B,159C 'servic':71B 'stale':183C 'termin':150C 'throw':43B,103C,131C,173C,224C 'trigger':60B,171C 'uncaught':143C 'undici':1A,21B,22B,76C,196C 'unhandl':146C 'upgrad':203C,229C 'user':201C 'valu':129C 'version':84C,208C 'via':9A 'whole':31B 'workaround':213C","nicknames":[],"mitigations":[],"who_affected":"Applications that use undici's cache interceptor composed with the dump interceptor (with maxSize) or the decompress interceptor, and that fetch from servers that may be malicious or compromised, are exposed. A process crash is the impact; the sources do not describe data access. Projects that do not use the cache interceptor or do not compose it with those handlers can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["medium","nodejs","npm","package","undici"],"campaign_type":null,"search_a":"'-120222':14A,17A '-2026':13A,16A 'cach':10A 'client':8A 'crash':6A 'cve':12A,15A 'malici':3A 'node.js':7A 'replay':11A 'server':4A 'undici':1A 'via':9A","search_b":"'cach':35B,49B 'cacheabl':65B 'caus':67B 'client':25B 'code':74B 'combin':38B 'compromis':56B 'crash':29B 'denial':69B 'execut':75B 'handler':41B 'http':24B,57B 'interceptor':36B 'librari':26B 'malici':54B 'node.js':18B,28B 'npm':19B 'packag':20B 'process':32B,46B 'replay':52B 'respons':45B,50B,66B 'serv':63B 'server':58B 'servic':71B 'throw':43B 'trigger':60B 'undici':21B,22B 'whole':31B","search_c":"'304':179C '7.0.0':85C '7.30.1':87C '7.30.2':197C '8.0.0':89C '8.12.3':91C '8.12.4':199C 'asynchron':133C 'avail':189C 'avoid':214C 'built':111C 'built-in':110C 'cach':94C,136C,217C 'cacheabl':168C 'client':80C,164C 'compos':97C,215C 'compromis':157C 'content':127C 'content-encod':126C 'crash':161C 'decompress':120C 'downstream':100C 'dump':113C 'encod':128C 'entri':184C 'escap':140C 'exceed':115C 'except':144C 'five':125C 'fix':194C 'handler':101C,222C 'http':79C,158C 'impact':187C 'includ':176C 'interceptor':95C,114C,121C,218C 'issu':192C 'later':210C 'malici':155C 'maxsiz':117C 'node.js':82C,152C 'one':205C 'process':106C,153C,227C 'promis':147C 'rais':132C 'reject':122C,148C 'replay':139C,175C 'respons':105C,137C,169C,221C,226C 'revalid':180C 'serv':166C 'server':159C 'stale':183C 'termin':150C 'throw':103C,131C,173C,224C 'trigger':171C 'uncaught':143C 'undici':76C,196C 'unhandl':146C 'upgrad':203C,229C 'user':201C 'valu':129C 'version':84C,208C 'workaround':213C","first_public_at":"2026-11-05T10:26:09+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","cvss_by":"ce714d77-add3-4f53-aff5-83d477b104bb","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-120222","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120222","severity":null,"published_at":"2026-11-06T10:16:36+00:00","modified_at":"2026-11-06T10:16:36+00:00","first_seen_at":"2026-11-06T10:40:56+00:00","fetched_at":"2026-11-06T10:40:56+00:00","note":null}],"documents":[{"id":85511,"url":"https://github.com/nodejs/undici/security/advisories/GHSA-3g9m-rv3r-w5w2","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-05T10:26:09+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}