Skip to main content

adm-zip EUVDEUVD-2026-83170

| CVE-2026-77301 HIGH
Memory Allocation with Excessive Size Value (CWE-789)
2026-09-18 GitHub_M GHSA-7q85-xj36-vmfc
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit tiny crafted ZIP to service
  2. Delivery
    App calls adm-zip getData() on entry
  3. Exploit
    Buffer.alloc uses declared multi-GB size
  4. Execution
    Resident memory committed before CRC check
  5. Impact
    OOM-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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

adm-zip < 0.6.1

Affected Packages

npm adm-zip fix: 0.6.1

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

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Remotely deliverable untrusted ZIP triggers reliable single-request memory exhaustion with no auth or interaction; strictly availability impact (C:N/I:N), scope unchanged.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE HIGH
Red Hat 6.5 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

2
Patch available
Sep 18, 2026 - 18:03 EUVD
CVE Published
Sep 18, 2026 - 16:38 cve.org
HIGH 7.5

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 65% exploitable
Prevalence
High
adm-zip is a very widely used npm ZIP library with millions of weekly downloads
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

58
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0
CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2024-35286 CRITICAL POC
9.8 Oct 21

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

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy