{"id":"CVE-2026-116137","kind":"vulnerability","aliases":["CVE-2026-116137"],"related":[],"title":"adm-zip: duplicate-entry check bypass lets crafted ZIPs overwrite validated files","description":"adm-zip through 0.6.1 contains a duplicate-entry validation bypass that allows attackers to evade the readEntries() check by using canonically equivalent entry names like './hello.txt' and 'hello.txt'. Attackers can craft ZIP archives where getEntry() or readAsText() validates benign content while extractAllTo() writes malicious content to the same path, bypassing integrity checks.","summary":"adm-zip through 0.6.1 checks duplicate ZIP entries by exact name, so names like './hello.txt' and 'hello.txt' pass as distinct. An attacker can craft an archive where getEntry() or readAsText() returns benign content while extractAllTo() writes different content to the same path.","severity":"medium","cvss":6.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["adm-zip","javascript","node","package"],"not_affected_if":["trusted-archives-only"],"how_to_check":"- Run `npm ls adm-zip` in each project to find installed versions and any transitive copies.\n- Look for adm-zip in package.json and lockfiles, and check whether the code calls extractAllTo() on archives from untrusted sources.","fix":"- Upgrade adm-zip to a version later than `0.6.1`; the sources do not name the patched version.\n- Until patched, validate and reject archives with duplicate or canonically equivalent entry names before extraction, or extract with a separate tool.","status":"open","published_at":"2026-10-25T12:16:30+00:00","first_seen_at":"2026-10-25T12:40:44+00:00","triaged_at":"2026-10-25T12:41:29+00:00","updated_at":"2026-10-25T12:41:29+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T12:41:29Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade adm-zip to a version later than `0.6.1`; the sources do not name the patched version.\n- Until patched, validate and reject archives with duplicate or canonically equivalent entry names before extraction, or extract with a separate tool.","reach":"unknown","title":"adm-zip: duplicate-entry check bypass lets crafted ZIPs overwrite validated files","impact":"medium","summary":"adm-zip through 0.6.1 checks duplicate ZIP entries by exact name, so names like './hello.txt' and 'hello.txt' pass as distinct. An attacker can craft an archive where getEntry() or readAsText() returns benign content while extractAllTo() writes different content to the same path.","category":"package","nicknames":[],"who_cares":["node","javascript","adm-zip"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Attacker overwrites files on disk with content that bypassed validation","analyst_note":"Check the NVD entry and adm-zip's repository for the patched version and whether extractAllTo() is affected by default.","how_to_check":"- Run `npm ls adm-zip` in each project to find installed versions and any transitive copies.\n- Look for adm-zip in package.json and lockfiles, and check whether the code calls extractAllTo() on archives from untrusted sources.","needs_analyst":true,"not_affected_if":["trusted-archives-only"],"who_is_affected":"Applications that use adm-zip to extract ZIP files supplied by users or other untrusted parties, and rely on reading or validating entries before extracting them. Projects that only create archives or only extract trusted, internally produced ZIPs are less exposed. The sources do not say which default configurations are affected.","user_interaction":"unknown","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.000652,"input_tokens":3357,"output_tokens":633,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-116137':17A,20A '-2026':16A,19A '/hello.txt':42B,97C '0.6.1':31B,74C 'adm':2A,22B,28B,71C 'adm-zip':1A,21B,27B,70C 'allow':83C 'archiv':53B,104C 'attack':49B,84C,100C 'benign':59B,110C 'bypass':8A,81C,121C 'canon':92C 'check':7A,32B,89C,123C 'contain':75C 'content':60B,65B,111C,116C 'craft':10A,51B,102C 'cve':15A,18A 'differ':64B 'distinct':47B 'duplic':5A,33B,78C 'duplicate-entri':4A,77C 'entri':6A,35B,79C,94C 'equival':93C 'evad':86C 'exact':37B 'extractallto':62B,113C 'file':14A 'getentri':55B,106C 'hello.txt':44B,99C 'integr':122C 'javascript':24B 'let':9A 'like':41B,96C 'malici':115C 'name':38B,40B,95C 'node':25B 'overwrit':12A 'packag':26B 'pass':45B 'path':69B,120C 'readastext':57B,108C 'readentri':88C 'return':58B 'use':91C 'valid':13A,80C,109C 'write':63B,114C 'zip':3A,11A,23B,29B,34B,72C,103C","nicknames":[],"mitigations":[],"who_affected":"Applications that use adm-zip to extract ZIP files supplied by users or other untrusted parties, and rely on reading or validating entries before extracting them. Projects that only create archives or only extract trusted, internally produced ZIPs are less exposed. The sources do not say which default configurations are affected.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-25T12:16:30+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/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-116137","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116137","severity":null,"published_at":"2026-10-25T12:16:30+00:00","modified_at":"2026-10-25T12:16:30+00:00","first_seen_at":"2026-10-25T12:40:44+00:00","fetched_at":"2026-10-25T12:40:44+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"}