{"id":"CVE-2026-106070","kind":"vulnerability","aliases":["CVE-2026-106070"],"related":[],"title":"Node.js: zlib ZipFile can return bytes from the wrong archive entry","description":"A flaw in the Node.js `zlib.ZipFile` API can cause it to return bytes that do not belong to the requested entry after the local and central header validation fails.\n\nWhen `zipEntry.modified` is read on an archive whose local header does not match its central directory, either directly or while compacting the archive, the validation error is caught but the parsed local header is left cached without a content offset. A later content read then returns attacker-controlled bytes from the start of the file instead of rejecting the archive, and CRC-32 verification still passes because the attacker controls the central directory CRC. A Node.js-based scanner can therefore approve different content from what another ZIP implementation extracts from the same archive.\n\nThis vulnerability affects Node.js **26.x**.","summary":"A flaw in Node.js zlib.ZipFile lets a crafted archive with mismatched local and central headers return attacker-chosen bytes from the start of the file instead of rejecting it. Because the CRC check passes too, a Node.js-based scanner can approve content that differs from what another ZIP tool extracts.","severity":"low","cvss":3.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["node.js","poc-public","runtime","security-scanners","zip-parsing"],"not_affected_if":["no-untrusted-zip-input","not-node-26"],"how_to_check":"- Run `node --version` and check whether it reports a 26.x release.\n- Search your code for uses of `zlib.ZipFile` or reads of `zipEntry.modified` on untrusted archives.","fix":null,"status":"open","published_at":"2026-10-23T17:17:19+00:00","first_seen_at":"2026-10-23T21:57:34+00:00","triaged_at":"2026-10-25T04:43:27+00:00","updated_at":"2026-10-25T04:43:27+00:00","category":"runtime","confidence":0.6,"triage":{"at":"2026-10-25T04:43:27Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"unknown","title":"Node.js: zlib ZipFile can return bytes from the wrong archive entry","impact":"medium","summary":"A flaw in Node.js zlib.ZipFile lets a crafted archive with mismatched local and central headers return attacker-chosen bytes from the start of the file instead of rejecting it. Because the CRC check passes too, a Node.js-based scanner can approve content that differs from what another ZIP tool extracts.","category":"runtime","nicknames":[],"who_cares":["node.js","zip-parsing","security-scanners"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Scanner approves archive content that differs from what other extractors receive","analyst_note":"","how_to_check":"- Run `node --version` and check whether it reports a 26.x release.\n- Search your code for uses of `zlib.ZipFile` or reads of `zipEntry.modified` on untrusted archives.","needs_analyst":false,"not_affected_if":["not-node-26","no-untrusted-zip-input"],"who_is_affected":"Systems running Node.js 26.x that parse untrusted ZIP archives with zlib.ZipFile, such as upload scanners or approval pipelines that compare Node's view of an archive against another extractor. The sources only name Node.js 26.x, so other major versions are not listed as affected.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.001152,"input_tokens":3522,"output_tokens":1600,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-106070':14A,17A '-2026':13A,16A '-32':172C '26':207C 'affect':205C 'anoth':76B,195C 'api':86C 'approv':70B,190C 'archiv':10A,37B,115C,131C,169C,202C 'attack':46B,156C,178C 'attacker-chosen':45B 'attacker-control':155C 'base':67B,186C 'belong':96C 'byte':6A,48B,92C,158C 'cach':144C 'caught':136C 'caus':88C 'central':42B,105C,123C,181C 'check':62B 'chosen':47B 'compact':129C 'content':71B,147C,151C,192C 'control':157C,179C 'craft':36B 'crc':61B,171C,183C 'cve':12A,15A 'differ':73B,191C 'direct':126C 'directori':124C,182C 'either':125C 'entri':11A,100C 'error':134C 'extract':79B,198C 'fail':108C 'file':54B,164C 'flaw':30B,81C 'header':43B,106C,118C,141C 'implement':197C 'instead':55B,165C 'later':150C 'left':143C 'let':34B 'local':40B,103C,117C,140C 'match':121C 'mismatch':39B 'node.js':1A,18B,32B,66B,84C,185C,206C 'offset':148C 'pars':28B,139C 'pass':63B,175C 'poc':20B 'poc-publ':19B 'public':21B 'read':112C,152C 'reject':57B,167C 'request':99C 'return':5A,44B,91C,154C 'runtim':22B 'scanner':25B,68B,187C 'secur':24B 'security-scann':23B 'start':51B,161C 'still':174C 'therefor':189C 'tool':78B 'valid':107C,133C 'verif':173C 'vulner':204C 'whose':116C 'without':145C 'wrong':9A 'x':208C 'zip':27B,77B,196C 'zip-pars':26B 'zipentry.modified':110C 'zipfil':3A 'zlib':2A 'zlib.zipfile':33B,85C","nicknames":[],"mitigations":[],"who_affected":"Systems running Node.js 26.x that parse untrusted ZIP archives with zlib.ZipFile, such as upload scanners or approval pipelines that compare Node's view of an archive against another extractor. The sources only name Node.js 26.x, so other major versions are not listed as affected.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T17:17:19+00:00","kev":null,"cvss_vector":"CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N","cvss_by":"support@hackerone.com","poc_count":1,"sources":[{"source":"nvd","external_id":"CVE-2026-106070","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-106070","severity":null,"published_at":"2026-10-23T17:17:19+00:00","modified_at":"2026-10-23T19:42:24+00:00","first_seen_at":"2026-10-23T21:57:34+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"github-poc","external_id":"CompleteTech-LLC/node-cve-2026-106070-check","url":"https://github.com/CompleteTech-LLC/node-cve-2026-106070-check","severity":null,"published_at":"2026-10-23T23:48:22+00:00","modified_at":null,"first_seen_at":"2026-10-23T23:55:02+00:00","fetched_at":"2026-10-23T23:55:02+00:00","note":null}],"documents":[{"id":2241,"url":"https://github.com/CompleteTech-LLC/node-cve-2026-106070-check","title":"CompleteTech-LLC/node-cve-2026-106070-check","kind":"poc","source":"github","text":"Standalone defensive checker project for CVE-2026-106070: Node.js: ZipFile invalid-header content substitution. One exploit per repository; implementation pending.\n\nstars 0","published_at":"2026-10-23T23:48:22+00:00","relation":"poc","confidence":null,"note":"0 stars"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}