{"id":"CVE-2026-116592","kind":"vulnerability","aliases":["CVE-2026-116592"],"related":[],"title":"undici: redirect cache flaw lets attackers poison or read cached responses","description":"undici is an HTTP client for Node.js. In versions 7.30.1 and 8.12.2 through 8.12.3, when an originless Agent composes the redirect and shared cache interceptors, undici decides whether to store the final response under the original request key by inspecting only the final redirect hop, which bypasses the earlier fix for CVE-2026-109829 that compared only the initial and final origins. A redirect that bounces through an untrusted origin and returns to the trusted origin is still cached under the trusted key, an intermediate hop's Vary is dropped so a response that varies on Authorization or Cookie can be served to a different user, and an intermediate hop's no-cache or default-uncacheable status is ignored so a non-storable redirect is laundered into a cacheable entry. An attacker who controls a redirect target from a trusted URL can poison the cached entry for that URL or have a private, per-user response served to a later caller. 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, compose the interceptors as cache then redirect, use per-origin dispatchers and cache stores, or disable shared caching on redirect-capable requests.","summary":"undici, the HTTP client bundled with Node.js, can store a redirected response under the wrong cache key when an originless Agent combines the redirect and shared cache interceptors. An attacker who controls a redirect target can poison the cache for a trusted URL or get a private per-user response served to another caller.","severity":"high","cvss":7.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["caching","http-client","node.js","package","undici"],"not_affected_if":["default-config","no-shared-cache","per-origin-dispatchers"],"how_to_check":"- Check the installed undici version with `npm ls undici` in the project.\n- Look for `undici` in `package-lock.json`, `pnpm-lock.yaml` or `yarn.lock` and check the resolved version.\n- Check whether code uses an Agent with both the redirect and shared cache interceptors composed together.","fix":"- undici `7.30.2`\n- undici `8.12.4`","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:12+00:00","updated_at":"2026-11-06T10:41:12+00:00","category":"package","confidence":0.75,"triage":{"at":"2026-11-06T10:41:12Z","model":"claude-haiku-5-5","output":{"fix":"- undici `7.30.2`\n- undici `8.12.4`","reach":"internet","title":"undici: redirect cache flaw lets attackers poison or read cached responses","impact":"high","summary":"undici, the HTTP client bundled with Node.js, can store a redirected response under the wrong cache key when an originless Agent combines the redirect and shared cache interceptors. An attacker who controls a redirect target can poison the cache for a trusted URL or get a private per-user response served to another caller.","audience":"developers","category":"package","nicknames":[],"who_cares":["node.js","undici","http-client","caching"],"confidence":0.75,"fix_status":"available","needs_auth":"no","worst_case":"Private responses served to other users or cached trusted URLs poisoned","analyst_note":"","how_to_check":"- Check the installed undici version with `npm ls undici` in the project.\n- Look for `undici` in `package-lock.json`, `pnpm-lock.yaml` or `yarn.lock` and check the resolved version.\n- Check whether code uses an Agent with both the redirect and shared cache interceptors composed together.","plain_action":"","needs_analyst":false,"not_affected_if":["default-config","no-shared-cache","per-origin-dispatchers"],"who_is_affected":"Applications that use undici's Agent with the redirect and shared cache interceptors composed together, without per-origin dispatchers or cache stores, are exposed. Code that only makes plain requests or uses the cache without redirect-following is likely not affected. The sources do not say whether Node.js bundled versions are affected.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000742,"input_tokens":4510,"output_tokens":581,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-109829':133C '-116592':14A,17A '-2026':13A,16A,132C '7.30.1':89C '7.30.2':251C '8.12.2':91C '8.12.3':93C '8.12.4':253C 'agent':45B,97C 'anoth':78B 'attack':6A,54B,214C 'author':176C 'bounc':145C 'bundl':29B 'bypass':126C 'cach':3A,10A,18B,40B,51B,63B,103C,158C,193C,227C,272C,281C,286C 'cacheabl':211C 'caller':79B,244C 'capabl':290C 'client':21B,28B,84C 'combin':46B 'compar':135C 'compos':98C,268C 'control':56B,216C 'cooki':178C 'cve':12A,15A,131C 'decid':106C 'default':196C 'default-uncach':195C 'differ':184C 'disabl':284C 'dispatch':279C 'drop':169C 'earlier':128C 'entri':212C,228C 'final':111C,122C,140C 'fix':129C,248C 'flaw':4A 'get':69B 'hop':124C,165C,189C 'http':20B,27B,83C 'http-client':19B 'ignor':200C 'initi':138C 'inspect':119C 'interceptor':52B,104C,270C 'intermedi':164C,188C 'issu':246C 'key':41B,117C,162C 'later':243C,264C 'launder':208C 'let':5A 'no-cach':191C 'node.js':22B,31B,86C 'non':204C 'non-stor':203C 'one':259C 'origin':115C,141C,149C,155C,278C 'originless':44B,96C 'packag':23B 'per':73B,237C,277C 'per-origin':276C 'per-us':72B,236C 'poison':7A,61B,225C 'privat':71B,235C 'read':9A 'redirect':2A,35B,48B,58B,100C,123C,143C,206C,218C,274C,289C 'redirect-cap':288C 'request':116C,291C 'respons':11A,36B,75B,112C,172C,239C 'return':151C 'serv':76B,181C,240C 'share':50B,102C,285C 'status':198C 'still':157C 'storabl':205C 'store':33B,109C,282C 'target':59B,219C 'trust':66B,154C,161C,222C 'uncach':197C 'undici':1A,24B,25B,80C,105C,250C 'untrust':148C 'upgrad':257C 'url':67B,223C,231C 'use':275C 'user':74B,185C,238C,255C 'vari':167C,174C 'version':88C,262C 'whether':107C 'workaround':267C 'wrong':39B","nicknames":[],"mitigations":[],"who_affected":"Applications that use undici's Agent with the redirect and shared cache interceptors composed together, without per-origin dispatchers or cache stores, are exposed. Code that only makes plain requests or uses the cache without redirect-following is likely not affected. The sources do not say whether Node.js bundled versions are affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["caching","high","httpclient","nodejs","package","undici"],"campaign_type":null,"search_a":"'-116592':14A,17A '-2026':13A,16A 'attack':6A 'cach':3A,10A 'cve':12A,15A 'flaw':4A 'let':5A 'poison':7A 'read':9A 'redirect':2A 'respons':11A 'undici':1A","search_b":"'agent':45B 'anoth':78B 'attack':54B 'bundl':29B 'cach':18B,40B,51B,63B 'caller':79B 'client':21B,28B 'combin':46B 'control':56B 'get':69B 'http':20B,27B 'http-client':19B 'interceptor':52B 'key':41B 'node.js':22B,31B 'originless':44B 'packag':23B 'per':73B 'per-us':72B 'poison':61B 'privat':71B 'redirect':35B,48B,58B 'respons':36B,75B 'serv':76B 'share':50B 'store':33B 'target':59B 'trust':66B 'undici':24B,25B 'url':67B 'user':74B 'wrong':39B","search_c":"'-109829':133C '-2026':132C '7.30.1':89C '7.30.2':251C '8.12.2':91C '8.12.3':93C '8.12.4':253C 'agent':97C 'attack':214C 'author':176C 'bounc':145C 'bypass':126C 'cach':103C,158C,193C,227C,272C,281C,286C 'cacheabl':211C 'caller':244C 'capabl':290C 'client':84C 'compar':135C 'compos':98C,268C 'control':216C 'cooki':178C 'cve':131C 'decid':106C 'default':196C 'default-uncach':195C 'differ':184C 'disabl':284C 'dispatch':279C 'drop':169C 'earlier':128C 'entri':212C,228C 'final':111C,122C,140C 'fix':129C,248C 'hop':124C,165C,189C 'http':83C 'ignor':200C 'initi':138C 'inspect':119C 'interceptor':104C,270C 'intermedi':164C,188C 'issu':246C 'key':117C,162C 'later':243C,264C 'launder':208C 'no-cach':191C 'node.js':86C 'non':204C 'non-stor':203C 'one':259C 'origin':115C,141C,149C,155C,278C 'originless':96C 'per':237C,277C 'per-origin':276C 'per-us':236C 'poison':225C 'privat':235C 'redirect':100C,123C,143C,206C,218C,274C,289C 'redirect-cap':288C 'request':116C,291C 'respons':112C,172C,239C 'return':151C 'serv':181C,240C 'share':102C,285C 'status':198C 'still':157C 'storabl':205C 'store':109C,282C 'target':219C 'trust':154C,161C,222C 'uncach':197C 'undici':80C,105C,250C 'untrust':148C 'upgrad':257C 'url':223C,231C 'use':275C 'user':185C,238C,255C 'vari':167C,174C 'version':88C,262C 'whether':107C 'workaround':267C","first_public_at":"2026-11-05T10:27:17+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","cvss_by":"ce714d77-add3-4f53-aff5-83d477b104bb","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-116592","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116592","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":85510,"url":"https://github.com/nodejs/undici/security/advisories/GHSA-mqg3-3v4r-cm32","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-05T10:27:17+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"}