Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted ZIP to app
-
DeliveryFalsify small declared entry size
-
ExploitApp reads entry via getDataAsync()
-
ExecutionGuard bypassed, full payload buffered
-
ImpactMemory exhaustion / denial of service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The target application must (1) read ZIP entries using adm-zip's asynchronous getDataAsync() path rather than the synchronous getData() path, and (2) rely on the entry's declared uncompressed size as its decompression-bomb protection - the async path in methods/inflater.js passes maxOutputLength to createInflateRaw but never enforces it, accumulating the entire decompressed stream regardless of declared size. The attacker must be able to supply a ZIP whose entries have falsified small declared uncompressed sizes paired with high-ratio DEFLATE payloads. Limiting factors: applications that use the synchronous getData() path are NOT affected (maxOutputLength is enforced there by Node's inflateRawSync); impact is limited to memory consumption (availability only, no code execution or data exposure); and meaningful denial of service typically requires repeated or large crafted submissions. Affected versions are adm-zip <= 0.6.0, fixed in 0.6.1. |
| Impact | This is a genuine but bounded availability issue, not a top-tier priority. The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes a remotely reachable, low-complexity, unauthenticated trigger, but the ONLY impact metric set is VA:L - low availability impact, with no confidentiality or integrity impact (VC:N/VI:N) and no subsequent-system effect. This aligns with CWE-400 (uncontrolled resource consumption) and the Denial Of Service tag. A working PoC is published in the GHSA advisory, so publicly available exploit code exists; however, there is NO CISA KEV listing and NO EPSS score was provided in the input, so there is no signal of active or widespread exploitation - this should be read as a disclosed, POC-backed DoS weakness rather than an actively exploited threat. A key conditional limits real-world risk: exploitation only matters for applications that both (a) read ZIP entries via the asynchronous getDataAsync() path and (b) rely on the declared uncompressed size as their bomb protection; applications using synchronous getData() are already protected. The CVSS AC:L/PR:N signals suggest easy exploitation, but the practical precondition (specific API usage pattern) is an application-level dependency the CVSS vector cannot capture - verify your own code path before prioritizing. Overall: a medium-severity, patch-now-on-next-cycle issue for affected consumers, not an emergency. |
| Exploit ScenarioDerived | An attacker uploads or supplies a crafted ZIP file to a Node.js service that uses adm-zip and reads entries via getDataAsync() after trusting the entry's declared uncompressed size. The ZIP contains an entry with a falsified tiny declared size (e.g. 1 byte) but a high-ratio DEFLATE payload that decompresses to tens of megabytes, which the async path accumulates fully into memory, bypassing the maxOutputLength guard. A working proof-of-concept demonstrating the 64 MiB-from-1-byte bypass is published in the GHSA advisory, and repeated or larger submissions can drive memory exhaustion. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Memory exhaustion in adm-zip 0.6.0 and earlier allows unauthenticated remote attackers to bypass the library's decompression-bomb guard on the asynchronous getDataAsync() path, causing the full decompressed payload to be allocated regardless of an entry's declared uncompressed size. This is a genuine but bounded availability issue: only Node.js applications that read ZIP entries asynchronously and rely on the declared size as their bomb protection are exposed, there is no confidentiality or integrity impact, and meaningful denial of service typically requires repeated or large crafted submissions. Publicly available exploit code exists in the form of a working proof-of-concept published with the GitHub advisory, and the flaw is fixed in adm-zip 0.6.1.
RemediationAI
Upgrade to adm-zip 0.6.1, the vendor-released patch published alongside advisory GHSA-c6fg-446q-cg94 and commit 491600683dacb6cb9fe0718a0eeb9cb5eb49afa6, which brings the asynchronous inflater in line with the synchronous maxOutputLength enforcement; verify the resolved version in package-lock.json since transitive dependents may pin older releases. If immediate upgrade is not possible, switch entry reads from getDataAsync() to the synchronous getData() path, which delegates maxOutputLength to Node's inflateRawSync and throws ERR_BUFFER_TOO_LARGE on overrun, at the cost of blocking the event loop during decompression and still permitting a single large entry that was honestly declared. Because header sizes are attacker-controlled, add an independent cap by piping createInflateRaw through a counting transform that destroys the stream once a hard byte budget is exceeded, which costs an extra wrapper stream per read but is the only mitigation that measures real output. Alternatively, run archive parsing inside a child process or worker thread with --max-old-space-size or resourceLimits so the worst case is a killed worker rather than a dead primary service, accepting the added IPC and startup overhead, and reject or queue-limit large uploads at the ingress layer to reduce the repetition needed for a sustained outage.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
adm-zip is a widely used pure-JavaScript ZIP library for Node.js. Node's zlib exposes a maxOutputLength option that is enforced by inflateRawSync, but not by the streaming createInflateRaw interface, which instead emits data chunks that the caller must bound. In methods/inflater.js the synchronous path (lines 3-10) passes {maxOutputLength: expectedLength} straight to inflateRawSync and Node aborts with ERR_BUFFER_TOO_LARGE when the output exceeds the declared size, while the asynchronous path (lines 12-31) passes the same option to createInflateRaw but never checks accumulated byte counts, buffering every chunk and finally allocating a Buffer of whatever size resulted. Because the declared uncompressed sizes in both the local file header and the central directory are attacker-controlled and never reconciled with actual stream output, a ZIP entry whose headers claim one byte can inflate to tens or hundreds of megabytes of high-ratio DEFLATE data. This is a textbook CWE-400 uncontrolled resource consumption case: the resource limit exists but is applied to only one of two code paths, so the security property the caller believes it has silently disappears when the async API is used.
Know when Adm Zip gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
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
Remotely supplied crafted ZIP, no auth or interaction needed (AV:N/AC:L/PR:N/UI:N); only availability affected via memory exhaustion (A:L), no confidentiality or integrity impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
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.
Blast Radius
ecosystem impact- 4,747 npm packages depend on adm-zip (704 direct, 4,072 indirect)
Ecosystem-wide dependent count for version 0.6.1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Related Vulnerabilities in adm-zip ZIP Processing Vulnerabilities
View all 4Memory exhaustion in the adm-zip Node.js library before 0.6.1 allows remote, unauthenticated attackers to crash or sever
adm-zip npm library before 0.4.9 is vulnerable to directory traversal, allowing attackers to write to arbitrary files vi
Symlink-following during ZIP extraction in adm-zip 0.5.9 through 0.6.0 allows a local attacker who can plant a symlink i
EUVD-2026-106906
GHSA-x5pg-q574-6h2m
NVD
CVE.org
EPSS
Exploit-DB