{"id":"CVE-2026-114103","kind":"vulnerability","aliases":["CVE-2026-114103"],"related":[],"title":"adm-zip: async extraction skips decompression bomb guard, exhausting memory","description":"adm-zip 0.6.0 contains a decompression bomb protection bypass that allows attackers to evade the maxOutputLength guard by targeting the asynchronous getDataAsync() path in methods/inflater.js. Attackers can craft ZIP entries with falsified small declared sizes and high-ratio DEFLATE payloads to exhaust memory in applications reading entries asynchronously.","summary":"adm-zip 0.6.0 fails to enforce its maxOutputLength limit when entries are read through the asynchronous getDataAsync() path. A crafted ZIP with falsified small declared sizes and a high-compression DEFLATE payload can exhaust the memory of an application that reads entries asynchronously.","severity":"medium","cvss":6.9,"epss":0.0027,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["adm-zip","node.js","package","self-hosted"],"not_affected_if":["no-async-zip-reads","trusted-input-only"],"how_to_check":"- Check the installed version with `npm ls adm-zip`; version `0.6.0` is the affected release named in the sources.\n- Search the code for `getDataAsync(` and for `maxOutputLength` to see whether untrusted ZIP files are read asynchronously with that guard set.","fix":"- Upgrade adm-zip past `0.6.0`; the sources do not name a fixed version, so check the adm-zip release list.\n- Until upgraded, read untrusted archives with the synchronous path or reject uploads above a size limit before parsing.","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:40:13+00:00","updated_at":"2026-10-25T03:40:13+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T03:40:13Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade adm-zip past `0.6.0`; the sources do not name a fixed version, so check the adm-zip release list.\n- Until upgraded, read untrusted archives with the synchronous path or reject uploads above a size limit before parsing.","reach":"internet","title":"adm-zip: async extraction skips decompression bomb guard, exhausting memory","impact":"medium","summary":"adm-zip 0.6.0 fails to enforce its maxOutputLength limit when entries are read through the asynchronous getDataAsync() path. A crafted ZIP with falsified small declared sizes and a high-compression DEFLATE payload can exhaust the memory of an application that reads entries asynchronously.","category":"package","nicknames":[],"who_cares":["node.js","adm-zip","self-hosted"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Attacker exhausts server memory, crashing the application via a crafted ZIP","analyst_note":"Confirm the fixed adm-zip version and whether the synchronous API is affected; check the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-114103.","how_to_check":"- Check the installed version with `npm ls adm-zip`; version `0.6.0` is the affected release named in the sources.\n- Search the code for `getDataAsync(` and for `maxOutputLength` to see whether untrusted ZIP files are read asynchronously with that guard set.","needs_analyst":true,"not_affected_if":["trusted-input-only","no-async-zip-reads"],"who_is_affected":"Applications that parse ZIP files supplied by users or other untrusted parties using adm-zip 0.6.0 and the asynchronous getDataAsync() call are exposed, because that path skips the maxOutputLength guard. Services that only handle trusted archives or never read entries asynchronously are less exposed. The sources do not say whether the synchronous API is also affected.","user_interaction":"unknown","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000695,"input_tokens":3395,"output_tokens":711,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-114103':14A,17A '-2026':13A,16A '0.6.0':29B,74C 'adm':2A,19B,27B,72C 'adm-zip':1A,18B,26B,71C 'allow':82C 'applic':66B,117C 'async':4A 'asynchron':42B,70B,92C,120C 'attack':83C,97C 'bomb':8A,78C 'bypass':80C 'compress':57B 'contain':75C 'craft':46B,99C 'cve':12A,15A 'declar':51B,105C 'decompress':7A,77C 'deflat':58B,111C 'enforc':32B 'entri':37B,69B,101C,119C 'evad':85C 'exhaust':10A,61B,114C 'extract':5A 'fail':30B 'falsifi':49B,103C 'getdataasync':43B,93C 'guard':9A,88C 'high':56B,109C 'high-compress':55B 'high-ratio':108C 'host':25B 'limit':35B 'maxoutputlength':34B,87C 'memori':11A,63B,115C 'methods/inflater.js':96C 'node.js':21B 'packag':22B 'path':44B,94C 'payload':59B,112C 'protect':79C 'ratio':110C 'read':39B,68B,118C 'self':24B 'self-host':23B 'size':52B,106C 'skip':6A 'small':50B,104C 'target':90C 'zip':3A,20B,28B,47B,73C,100C","nicknames":[],"mitigations":[],"who_affected":"Applications that parse ZIP files supplied by users or other untrusted parties using adm-zip 0.6.0 and the asynchronous getDataAsync() call are exposed, because that path skips the maxOutputLength guard. Services that only handle trusted archives or never read entries asynchronously are less exposed. The sources do not say whether the synchronous API is also affected.","tier":"C","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:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/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-114103","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114103","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-114103","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-114103","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"}