{"id":"CVE-2026-114104","kind":"vulnerability","aliases":["CVE-2026-114104"],"related":[],"title":"adm-zip: duplicate ZIP entry names bypass content validation before extraction","description":"adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.","summary":"adm-zip before 0.6.1 resolves duplicate entry names inconsistently: getEntry() returns the last copy while extractAllTo() writes the first. An attacker can therefore get bytes past a content check and onto disk.","severity":"high","cvss":8.2,"epss":0.00232,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["adm-zip","node.js","package","self-hosted"],"not_affected_if":["no-untrusted-zip-extraction","trusted-input-only"],"how_to_check":"- Run `npm ls adm-zip` in each project to find the installed version.\n- Check lockfiles (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`) for `adm-zip` below `0.6.1`.","fix":"- Upgrade `adm-zip` to `0.6.1` or later.\n- Until upgraded, do not extract untrusted ZIP archives with `extractAllTo()`, or validate entries by reading the same entry that gets written.","status":"open","published_at":"2026-10-21T01:17:36+00:00","first_seen_at":"2026-10-23T21:57:28+00:00","triaged_at":"2026-10-25T03:03:52+00:00","updated_at":"2026-10-25T03:03:52+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T03:03:52Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `adm-zip` to `0.6.1` or later.\n- Until upgraded, do not extract untrusted ZIP archives with `extractAllTo()`, or validate entries by reading the same entry that gets written.","reach":"unknown","title":"adm-zip: duplicate ZIP entry names bypass content validation before extraction","impact":"medium","summary":"adm-zip before 0.6.1 resolves duplicate entry names inconsistently: getEntry() returns the last copy while extractAllTo() writes the first. An attacker can therefore get bytes past a content check and onto disk.","category":"package","nicknames":[],"who_cares":["node.js","adm-zip","self-hosted"],"confidence":0.6,"needs_auth":"unknown","worst_case":"unvalidated file bytes are written to disk during extraction","analyst_note":"Confirm the affected version range and any published patch details at the NVD entry; check whether a CVSS 8.2 rating matches the described attack and whether exploitation requires a server-side extraction path.","how_to_check":"- Run `npm ls adm-zip` in each project to find the installed version.\n- Check lockfiles (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`) for `adm-zip` below `0.6.1`.","needs_analyst":true,"not_affected_if":["trusted-input-only","no-untrusted-zip-extraction"],"who_is_affected":"Applications that use adm-zip to extract ZIP archives supplied by users or other untrusted sources, and that validate entry contents before extraction. Projects that only create archives or only handle trusted archives are less exposed. unknown whether other adm-zip APIs are affected.","user_interaction":"unknown","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000652,"input_tokens":3378,"output_tokens":629,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-114104':15A,18A '-2026':14A,17A '0.6.1':31B,64C 'adm':2A,20B,28B,61C 'adm-zip':1A,19B,27B,60C 'allow':72C 'archiv':81C,89C 'attack':48B,73C,86C 'bypass':8A,75C 'byte':52B,103C 'caus':101C 'check':56B 'contain':65C 'content':9A,55B,76C 'copi':41B 'craft':88C 'cve':13A,16A 'disk':59B,108C 'duplic':4A,33B,83C,95C 'entri':6A,34B,68C,84C 'extract':12A 'extractallto':43B,97C 'first':46B,100C 'get':51B 'getentri':37B,91C 'host':26B 'inconsist':36B,67C 'last':40B,94C 'name':7A,35B,85C 'node.js':22B 'onto':58B 'packag':23B 'past':53B 'resolut':69C 'resolv':32B 'return':38B,92C 'self':25B 'self-host':24B 'suppli':79C 'therefor':50B 'unvalid':102C 'valid':10A,77C 'vulner':70C 'write':44B,98C 'written':106C 'zip':3A,5A,21B,29B,62C,80C","nicknames":[],"mitigations":[],"who_affected":"Applications that use adm-zip to extract ZIP archives supplied by users or other untrusted sources, and that validate entry contents before extraction. Projects that only create archives or only handle trusted archives are less exposed. unknown whether other adm-zip APIs are affected.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T01:17:36+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/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":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-114104","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114104","severity":null,"published_at":"2026-10-21T01:17:36+00:00","modified_at":"2026-10-21T01:17:36+00:00","first_seen_at":"2026-10-23T21:57:28+00:00","fetched_at":"2026-10-23T22:29:01+00:00","note":null},{"source":"epss","external_id":"CVE-2026-114104","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-114104","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T13:15:54+00:00","fetched_at":"2026-10-24T13:15:54+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"}