Skip to main content

adm-zip EUVDEUVD-2026-106907

| CVE-2026-114104 HIGH
Interpretation Conflict (CWE-436)
2026-10-21 VulnCheck GHSA-mr8q-rv22-x3fr
8.2
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Craft ZIP with duplicate entry names
  2. Delivery
    Submit archive to validating application
  3. Exploit
    getEntry() returns benign last duplicate
  4. Execution
    extractAllTo() writes malicious first duplicate
  5. Impact
    Unvalidated bytes written to disk

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service Interpretation consistency
Exploitation Conditions

Exploitation requires the consuming application to follow a validate-then-extract pattern on untrusted input: it must inspect a named entry's content via getEntry(name).getData() and trust that result, then call extractAllTo() (synchronous, default overwrite policy) on the same archive. The attacker must craft a ZIP containing two entries with the identical name so getEntry() resolves the last duplicate (via entryTable) while extractAllTo() writes the first (via entryList). LIMITING FACTORS: this is NOT exploitable against applications that simply extract without a getEntry-based content check, nor against versions 0.6.1 and later; the AC:H and AT:P metrics reflect that the specific duplicate-name ordering and the application's check-then-extract logic must both align for the bypass to succeed.

Impact

This is a genuine-but-conditional integrity risk rather than a blanket critical flaw. The CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:N/UI:N) scores 8.2 with impact confined to integrity (VI:H; VC:N, VA:N), which is consistent with a classic TOCTOU-style validate-then-extract bypass (CWE-436, interpretation conflict). The high attack complexity (AC:H) and present attack requirements (AT:P) are the key moderating signals: exploitation does not work against arbitrary deployments but only against applications that follow a specific check-then-use pattern, so the headline score overstates universal risk. A working PoC is published in the GHSA advisory (publicly available exploit code exists), which raises practical concern, but there is NO CISA KEV listing and NO EPSS score was provided in the input, so there is no evidence of active or widespread exploitation - the risk is best read as library-supply-chain/targeted rather than mass-exploited. Note a signal tension: PR:N labels this unauthenticated, yet real-world impact depends entirely on how the downstream application uses adm-zip, so the 'network unauthenticated' framing applies to delivering the malicious archive, not to a direct service compromise.

Exploit ScenarioDerived

An application accepts an untrusted ZIP, calls getEntry('b.txt').getData() to validate that entry's contents against a policy, and after the check passes calls extractAllTo() to unpack the archive. An attacker submits a crafted ZIP containing two entries both named 'b.txt' - a benign one that getEntry() returns for validation and a malicious one that extractAllTo() actually writes to disk. A public PoC demonstrating this exact divergence (validated bytes 'SECOND' vs. written bytes 'FIRST') is included in the GHSA advisory.

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

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

Alert me

AnalysisAIv1 – Oct 21, 2026

Integrity bypass in adm-zip through 0.6.0 allows an unauthenticated attacker who supplies a crafted ZIP to a validate-then-extract application to have getEntry() approve one duplicate entry while extractAllTo() writes a different entry's bytes to disk. The flaw is conditional: the consuming application must inspect a named entry's content via getEntry() and then extract the same archive, and the archive must contain duplicate entry names with the relevant ordering; applications that only extract without a getEntry-based content check are not affected. Public proof-of-concept code is present in the upstream advisory, and no CISA KEV active-exploitation listing is associated with this CVE.

RemediationAI

Upgrade adm-zip to 0.6.1 or later, which contains the upstream fix for duplicate-name entry resolution; the fix commit is https://github.com/cthackers/adm-zip/commit/05101d47b3b983b705cc3e66fc34366118ba7b99 and the advisory is https://github.com/cthackers/adm-zip/security/advisories/GHSA-p634-w6r4-rjp2. If immediate upgrade is not possible, do not use getEntry(name).getData() as the sole validation step before extractAllTo(); instead pre-scan the archive entry list and reject archives containing duplicate entry names (trade-off: may reject rare but legitimate archives with duplicate names), or extract into an isolated quarantine directory and validate the actual files written to disk before trusting or moving them (trade-off: additional storage, I/O, and cleanup, plus validation must complete before any extracted content is used). Earlier versions remain vulnerable, so compensating controls should be treated as temporary.

Affected VersionsENISA

adm-zip 0 <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 is a Node.js ZIP library used to read, create, and extract ZIP archives. ZIP archives can contain multiple entries with identical names, and the format does not require unique names. In vulnerable versions, adm-zip stores all entries in an internal entryList but maintains a name-keyed entryTable that overwrites earlier entries, so getEntry(name) resolves the last duplicate while extractAllTo() iterates entryList and writes the first duplicate. This is an interpretation conflict (CWE-436) between lookup and extraction that breaks the common validate-then-extract pattern when an application trusts getEntry() output before extracting untrusted input. The independently assessed CVSS 3.1 vector is AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N, reflecting integrity-only impact and high attack complexity tied to the required duplicate-name ordering and application behavior.

Know when npm 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 (VulnCheck) PRIMARY 8.2 HIGH
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

Malicious archive is delivered remotely (AV:N) with no auth (PR:N), but success depends on the app's specific validate-then-extract logic and crafted duplicate ordering (AC:H); impact is integrity-only (I:H, C:N, A:N).

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 21, 2026 - 02:01 EUVD
CVE Published
Oct 21, 2026 - 00:37 cve.org
HIGH 8.2

DescriptionCVE.org

adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 4,747 npm packages depend on adm-zip (704 direct, 4,072 indirect)

Ecosystem-wide dependent count for version 0.6.1.

Technical POC Analysis

CWE-436 (Interpretation Conflict), with CWE-696 (Incorrect Behavior Order) as a secondary classification per the advisory.

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

Organizations using the adm-zip library through 0.6.0 face a high-severity integrity weakness in ZIP handling that can make file-validation results unreliable when an application inspects an entry before extracting the same archive. Publicly available exploit code exists, and no vendor-released patch is identified at time of analysis, leaving file-upload and content-processing workflows exposed until mitigations are applied. Leadership should prioritize this because the issue can undermine assurance in business processes that depend on inspecting package contents before they are written to disk.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis; interim mitigations include rejecting ZIP archives with duplicate entry names before processing, avoiding validate-then-extract patterns that use getEntry() followed by extractAllTo() on the same archive, extracting to an isolated temporary location and validating the actual extracted file rather than the pre-extraction entry, and replacing adm-zip through 0.6.0 with a maintained alternative or wrapper that enforces unique entry names where feasible.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
High
adm-zip is a very widely used npm ZIP library with heavy download volume
Data Quality
3 sources
Confidence: Low

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 No
EPSS 0.2%
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Related Vulnerabilities in adm-zip ZIP Processing Vulnerabilities

View all 4

More in npm

View all
CVE-2021-43616 CRITICAL POC
9.8 Nov 13

The npm ci command in npm 7.x and 8.x through 8.1.3 proceeds with an installation even if dependency information in pack

CVE-2026-61568 CRITICAL POC
9.6 Sep 15

DNS rebinding against the local Streamable HTTP MCP listener in @zereight/mcp-gitlab before 2.1.30 lets a malicious web

CVE-2026-101894 CRITICAL POC
9.1 Sep 28

Archive extraction in the Node.js decompress package allows a crafted archive containing chained symlink entries to reso

CVE-2026-91127 HIGH POC
8.2 Sep 18

The legacy DOC renderer in File Viewer emits document-controlled hyperlink targets into generated HTML after character e

CVE-2026-102826 HIGH POC
8.1 Sep 29

Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command

CVE-2026-102281 HIGH POC
7.5 Sep 28

A remote, unauthenticated denial-of-service condition in the NestJS (Nest) microservices framework lets an attacker cras

CVE-2026-102278 HIGH POC
7.5 Sep 28

Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a

CVE-2026-102276 HIGH POC
7.5 Sep 28

Stack exhaustion in the npm library brace-expansion (all versions prior to 1.1.19, 2.1.5, 3.0.7, and 5.0.10) lets a craf

CVE-2026-101910 MEDIUM POC
6.9 Sep 28

The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat

CVE-2026-101912 MEDIUM POC
6.3 Sep 28

Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo

CVE-2026-101911 MEDIUM POC
6.3 Sep 28

Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or

CVE-2026-51996 CRITICAL
9.8 Sep 24

A credential-isolation flaw in geelen mcp-remote 0.1.16 through 0.1.38 allows a remote attacker who controls or can pred

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