Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit tiny crafted ZIP to service
-
DeliveryApp calls adm-zip getData() on entry
-
ExploitBuffer.alloc uses declared multi-GB size
-
ExecutionResident memory committed before CRC check
-
ImpactOOM-kill / service-wide memory exhaustion
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory allocation limits
|
| Exploitation Conditions | Exploitation requires an application that (1) uses adm-zip prior to 0.6.1 and (2) reads entries from attacker-controlled/untrusted ZIP archives, then calls getData() (directly or via extraction). The malicious archive needs only a central-directory entry whose declared uncompressed size is large (POC uses 1,774,399,200 bytes with a 5-byte compressed payload); no authentication, user interaction, or non-default configuration is needed. The limiting factor is not the ZIP itself but the deployment: impact is greatest on memory-constrained hosts (containers, serverless, small VMs) where a single request OOM-kills the process before the uncatchable CRC error, while larger hosts require concurrent requests to exhaust memory. Applications that never parse untrusted ZIPs are not exposed. |
| Impact | This is a genuine but bounded risk. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) accurately characterizes a pure availability impact: no confidentiality or integrity loss, but a clean unauthenticated remote denial-of-service. CWE-789 (uncontrolled memory allocation) matches the root cause - getData() calls Buffer.alloc() on the attacker-declared central-directory uncompressed size before validating it against the compressed size or CRC. A working POC exists (a 105-byte ZIP inlined as base64 in the GHSA advisory, sha256 980d343..., demonstrating ~1.8 GB committed from ~16 million× amplification), so this is 'publicly available exploit code exists', NOT active exploitation - there is no CISA KEV listing and no EPSS score provided, so widespread automated exploitation cannot be asserted. The realistic caveat: exploitation depends on the application actually reading entries from untrusted archives and calling getData(); it is not a network-listening service flaw. Signals are consistent (CVSS DoS, CWE, POC, patch all align) - the only metadata conflict is the 'Information Disclosure' tag, which contradicts the C:N/I:N vector and is a mislabel. |
| Exploit ScenarioDerived | An attacker uploads or submits a tiny (~105-byte) crafted ZIP to any service that parses untrusted archives with adm-zip and calls getEntries()[0].getData() - for example a file-upload endpoint, email attachment scanner, or serverless function. The malformed central directory declares a multi-gigabyte uncompressed size, so getData() commits ~1.8 GB of resident memory in seconds before the CRC check ever runs, OOM-killing the process. A public base64 POC is included in the advisory, and concurrent requests can exhaust memory on even large hosts. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Memory exhaustion in the adm-zip Node.js library before 0.6.1 allows remote, unauthenticated attackers to crash or severely degrade any service that reads entries from untrusted ZIP archives: a 105-byte crafted archive whose central directory declares an uncompressed size of ~1.77 GB forces the library to commit roughly 1.8 GB of resident memory before validation fails, which OOM-kills memory-constrained processes (containers, serverless, small VMs) and, with concurrency, can exhaust larger hosts. Publicly available exploit code exists - the vendor advisory includes a self-contained 105-byte base64 PoC (sha256 980d34356fbb248fe527b9d0ac3eabc5c99393a374014be6199523de16709386) - and the CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5) confirms a network-reachable availability-only impact with no privileges or user interaction required. There is no indication of confirmed active exploitation (not in CISA KEV), and applications that never parse attacker-controlled ZIPs are not exposed; the practical severity is governed by host memory limits rather than by any authentication or configuration bar.
RemediationAI
Upgrade adm-zip to 0.6.1 or later (Vendor-released patch: 0.6.1), as documented in GHSA-7q85-xj36-vmfc (https://github.com/cthackers/adm-zip/security/advisories/GHSA-7q85-xj36-vmfc) and the v0.6.1 release tag (https://github.com/cthackers/adm-zip/releases/tag/v0.6.1); the underlying fix is commit 491600683dacb6cb9fe0718a0eeb9cb5eb49afa6, which caps decompression output at the declared uncompressed size using zlib maxOutputLength (with a 1-byte floor for empty entries), manually enforces the same ceiling on the streaming path and raises MAX_OUTPUT_EXCEEDED, and routes stream errors through the callback instead of allowing uncaught exceptions. Update lockfiles and rebuild containers so transitive dependencies are picked up, and verify the resolved version with 'npm ls adm-zip'. Where upgrading immediately is not possible, apply compensating controls that directly address the pre-allocation behavior rather than generic hardening: run any code path that calls getData() on untrusted archives inside a dedicated worker, child process, or container with a hard memory limit and automatic restart, so an oversized allocation kills only that unit of work (side effect: added latency and process-management complexity, plus the crash is still triggered - it is merely contained); pre-inspect the central directory of incoming archives and reject or quarantine any entry whose declared uncompressed size exceeds a fixed ceiling or whose declared-to-actual size ratio is implausible before invoking adm-zip at all (side effect: legitimate highly compressible archives must be sized generously and validation code must itself be memory-safe); and refuse to accept ZIP uploads from anonymous or untrusted callers, or strip them to a server-side unpacked/streamed representation, on the affected service endpoints (side effect: loss of functionality where archive upload is a core feature). Generic ingress payload-size limits are only marginally useful here because the amplification ratio is roughly 16 million to one - a few hundred bytes are enough to declare gigabytes - so they should be layered with, not substituted for, the controls above. There is no vendor-released patch for versions prior to 0.6.1; no public exploit beyond the advisory PoC has been identified, and no active exploitation is confirmed.
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 parses the ZIP central directory, whose per-entry 'size' field is attacker-controlled metadata describing the uncompressed length. In vulnerable versions, zipEntry.js getData() calls Buffer.alloc(<declared uncompressed size>) to pre-allocate the output buffer and only afterwards compares that value against the compressed payload and available bytes, and only then runs the CRC32 check. This is CWE-789 (Memory Allocation with Excessive Size Value): the allocation is driven directly by an untrusted integer rather than being bounded by the actual input size or a configurable ceiling, yielding an amplification ratio of roughly 16 million to one for the PoC (1,774,399,200 declared bytes from a 5-byte compressed entry inside a 105-byte archive). Because the allocation is committed before validation and the subsequent 'ADM-ZIP: CRC32 checksum failed' error is thrown only after the memory has been reserved, the failure mode on a memory-constrained host is an uncatchable OOM kill rather than a catchable exception. The same decompression path is exposed through the inflate helper, which historically passed no maxOutputLength to zlib and ignored the cap on the streaming code path. The fix in 0.6.1 (commit 491600683dacb6cb9fe0718a0eeb9cb5eb49afa6) caps decompression output at the entry's declared uncompressed size via zlib's maxOutputLength (using a 1-byte floor so a declared size of 0 cannot disable the cap), enforces the same ceiling manually on the streaming path with a new MAX_OUTPUT_EXCEEDED error, and routes zlib stream errors through the callback instead of letting them surface as uncaught exceptions. Note that the CPE string cpe:2.3:a:cthackers:adm-zip:*:*:*:*:*:*:*:* covers the full pre-0.6.1 version range, and the accompanying tag 'Information Disclosure' does not reflect the assessed impact, which is availability only (C:N/I:N/A:H).
Know when Node.js 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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Remotely deliverable untrusted ZIP triggers reliable single-request memory exhaustion with no auth or interaction; strictly availability impact (C:N/I:N), scope unchanged.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
adm-zip is a JavaScript library for creating and extracting ZIP archives in Node.js. Prior to 0.6.1, getData() in zipEntry.js trusts an entry's central-directory uncompressed size and allocates output memory before validating that value against the actual compressed data and decompression result. A small crafted ZIP can declare a multi-gigabyte uncompressed size, causing Buffer.alloc and decompression handling to commit excessive resident memory before CRC validation reports an error. Applications that read entries from untrusted archives can therefore be terminated by the operating system or suffer service-wide memory exhaustion. This issue is fixed in version 0.6.1.
Blast Radius
ecosystem impact- 5,379 npm packages depend on adm-zip (820 direct, 4,594 indirect)
Ecosystem-wide dependent count for version 0.6.1.
Technical POC Analysis
CWE-789, memory allocation with excessive size value.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A memory-exhaustion flaw in the widely deployed adm-zip Node.js library (all versions before 0.6.1) allows any unauthenticated, remote party to crash or severely degrade services that open untrusted ZIP archives, because a 105-byte crafted file can force roughly 1.8 GB of resident memory to be committed before validation fails. Every internet-facing upload, import, or file-processing endpoint built on this library is a potential outage vector, with containerized, serverless, and small-VM workloads likely to fail first and concurrent requests able to take down larger hosts. Leadership should treat this as a low-effort, repeatable availability risk to customer-facing products rather than a data-breach risk, since the CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N, availability-only) confirms no privileges or user interaction are needed and there is publicly available exploit code exists.
No vendor-released patch identified at time of analysis (advisory identifies 0.6.1 as the version boundary; upgrade immediately once that release is obtainable): enforce pre-parse validation of declared central-directory sizes and compression ratios, reject oversized or high-ratio archives, cap container/serverless memory with restart policies, run ZIP parsing in an isolated memory-limited worker with timeouts, apply edge request-body caps and rate limiting, and monitor for OOM-kill and process-restart spikes; apply vendor patch when released.
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
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
A vulnerability in NuPoint Messenger (NPM) of Mitel MiCollab through 9.8.0.33 allows an unauthenticated attacker to cond
Vendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Micro 5.3 | Affected |
| SUSE Linux Enterprise Micro 5.3 | Affected |
| SUSE Linux Enterprise Micro 5.4 | Affected |
| SUSE Linux Enterprise Micro 5.4 | Affected |
| SUSE Linux Enterprise Micro 5.5 | Affected |
| SUSE Linux Enterprise Micro 5.5 | Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Micro 6.0 | Affected |
| SUSE Linux Micro 6.0 | Affected |
| SUSE Linux Micro 6.1 | Affected |
| SUSE Linux Micro 6.1 | Affected |
| SUSE Linux Micro 6.2 | Affected |
| SUSE Linux Micro 6.2 | Affected |
| openSUSE Leap 16.0 | Affected |
| openSUSE Leap 16.0 | Affected |
| openSUSE Leap Micro 5.5 | Affected |
| SUSE Linux Enterprise Server for NVIDIA 16.1 | Affected |
| SUSE Linux Enterprise Server for NVIDIA 16.1 | Affected |
EUVD-2026-83170
GHSA-7q85-xj36-vmfc
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB