{"id":"CVE-2026-116689","kind":"vulnerability","aliases":["CVE-2026-116689"],"related":[],"title":"follow-redirects: custom credential headers can leak to cross-origin redirect targets","description":"follow-redirects is a Node.js HTTP and HTTPS client wrapper that automatically follows redirects. From 1.16.0 until 1.16.2, the documented sensitiveHeaders option is checked with value instanceof Array, so an array created in another JavaScript realm is replaced with an empty list even though Array.isArray recognizes it. When a request then follows an attacker-controlled cross-origin redirect, a custom credential header named in that discarded list can be forwarded to the redirect destination. This issue is fixed in version 1.16.2.","summary":"follow-redirects 1.16.0 through 1.16.2 mishandles the sensitiveHeaders option when the array comes from another JavaScript realm, silently dropping the list. A custom credential header that should be stripped can then be forwarded to an attacker-controlled cross-origin redirect destination.","severity":"medium","cvss":5.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["axios","follow-redirects","node.js","npm","package"],"not_affected_if":["fixed-version","no-cross-origin-redirects","no-sensitiveheaders-option"],"how_to_check":"- Run `npm ls follow-redirects` to find every installed copy and its version.\n- Check whether application code passes a `sensitiveHeaders` option to follow-redirects, for example in a wrapper around `http` or `https`.","fix":"- Upgrade follow-redirects to `1.16.2` or later.\n- Until upgraded, avoid passing `sensitiveHeaders` arrays created in another realm (such as from a VM context or iframe).","status":"open","published_at":"2026-10-27T20:17:14+00:00","first_seen_at":"2026-10-27T20:33:27+00:00","triaged_at":"2026-10-27T20:35:34+00:00","updated_at":"2026-10-27T20:35:34+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-27T20:35:34Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade follow-redirects to `1.16.2` or later.\n- Until upgraded, avoid passing `sensitiveHeaders` arrays created in another realm (such as from a VM context or iframe).","reach":"internet","title":"follow-redirects: custom credential headers can leak to cross-origin redirect targets","impact":"medium","summary":"follow-redirects 1.16.0 through 1.16.2 mishandles the sensitiveHeaders option when the array comes from another JavaScript realm, silently dropping the list. A custom credential header that should be stripped can then be forwarded to an attacker-controlled cross-origin redirect destination.","category":"package","nicknames":[],"who_cares":["node.js","npm","follow-redirects","axios"],"confidence":0.7,"needs_auth":"no","worst_case":"custom credential header forwarded to attacker-controlled redirect destination","analyst_note":"","how_to_check":"- Run `npm ls follow-redirects` to find every installed copy and its version.\n- Check whether application code passes a `sensitiveHeaders` option to follow-redirects, for example in a wrapper around `http` or `https`.","needs_analyst":false,"not_affected_if":["fixed-version","no-sensitiveHeaders-option","no-cross-origin-redirects"],"who_is_affected":"Applications that use follow-redirects 1.16.0 through 1.16.2 to make outbound HTTP or HTTPS requests, and that set a custom credential header via sensitiveHeaders so it is stripped on redirect. Exposure also requires the request to follow a redirect to a cross-origin host the attacker controls. Projects that do not set sensitiveHeaders or that run only on a single realm are less exposed, and projects on 1.16.2 or later are not affected.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000666,"input_tokens":3396,"output_tokens":652,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-116689':17A,20A '-2026':16A,19A '1.16.0':31B,88C '1.16.2':33B,90C,155C 'anoth':43B,106C 'array':40B,100C,103C 'array.isarray':117C 'attack':65B,127C 'attacker-control':64B,126C 'automat':84C 'axio':21B 'check':96C 'client':81C 'come':41B 'control':66B,128C 'creat':104C 'credenti':5A,52B,135C 'cross':11A,68B,130C 'cross-origin':10A,67B,129C 'custom':4A,51B,134C 'cve':15A,18A 'destin':71B,148C 'discard':140C 'document':92C 'drop':47B 'empti':113C 'even':115C 'fix':152C 'follow':2A,23B,29B,73C,85C,124C 'follow-redirect':1A,22B,28B,72C 'forward':61B,144C 'header':6A,53B,136C 'http':78C 'https':80C 'instanceof':99C 'issu':150C 'javascript':44B,107C 'leak':8A 'list':49B,114C,141C 'mishandl':34B 'name':137C 'node.js':25B,77C 'npm':26B 'option':37B,94C 'origin':12A,69B,131C 'packag':27B 'realm':45B,108C 'recogn':118C 'redirect':3A,13A,24B,30B,70B,74C,86C,132C,147C 'replac':110C 'request':122C 'sensitivehead':36B,93C 'silent':46B 'strip':57B 'target':14A 'though':116C 'valu':98C 'version':154C 'wrapper':82C","nicknames":[],"mitigations":[],"who_affected":"Applications that use follow-redirects 1.16.0 through 1.16.2 to make outbound HTTP or HTTPS requests, and that set a custom credential header via sensitiveHeaders so it is stripped on redirect. Exposure also requires the request to follow a redirect to a cross-origin host the attacker controls. Projects that do not set sensitiveHeaders or that run only on a single realm are less exposed, and projects on 1.16.2 or later are not affected.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-27T20:17:14+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-116689","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116689","severity":null,"published_at":"2026-10-27T20:17:14+00:00","modified_at":"2026-10-27T20:17:14+00:00","first_seen_at":"2026-10-27T20:33:27+00:00","fetched_at":"2026-10-27T20:33:27+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"}