Skip to main content

adm-zip EUVDEUVD-2026-109389

| CVE-2026-116137 MEDIUM
Interpretation Conflict (CWE-436)
2026-10-25 VulnCheck GHSA-mv5w-h6hm-qcp7
6.3
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 canonically equivalent entry names
  2. Exploit
    Submit archive to application for validation
  3. Execution
    getEntry/readAsText inspects benign duplicate
  4. Impact
    extractAllTo writes malicious content to same path

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 use adm-zip's validate-then-extract pattern: it must inspect entry content via getEntry() or readAsText() to approve the archive, then write it out with extractAllTo(). The attacker must craft an archive containing duplicate entries under canonically equivalent names (e.g. './hello.txt' and 'hello.txt') so readEntries() treats them as distinct and the validated entry differs from the extracted one. Limiting factors: only adm-zip through 0.6.1 is affected; the impact is confined to integrity (a wrong file written to an expected path), with no confidentiality or availability effect; and applications that extract without a prior content-validation step gain no security benefit to bypass, so the flaw is inert for them.

Impact

This is a medium-severity integrity issue, not a top-tier emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) scores 6.3 and limits impact to the vulnerable system's integrity (VI:L) with no confidentiality (VC:N) or availability (VA:N) effect, matching a validation-bypass rather than code execution. Network reach and no required privileges raise exposure, but the AT:P 'attack requirement' is the key moderator: exploitation only matters when a consuming application uses adm-zip's validate-then-extract pattern. No EPSS score was provided and the CVE is not in CISA KEV, so there is no signal of widespread or active exploitation; the vuln.today decision label is 'this_month', consistent with scheduled remediation rather than act_now/emergency. No explicit 'POC: Publicly available (confirmed)' marker is present in the input, though a VulnCheck advisory and GitHub issue #587 document the mechanism. Overall this is a real but conditional integrity-bypass risk whose impact depends heavily on how downstream applications use the library, not a high-CVSS-but-no-real-risk inflation nor an urgent actively-exploited flaw.

Exploit ScenarioDerived

An attacker submits a crafted ZIP archive to an application that first inspects entries with getEntry() or readAsText() to approve their content, then unpacks with extractAllTo(). Because the readEntries() duplicate check is evaded using canonically equivalent names such as './hello.txt' and 'hello.txt', the validator sees benign content while extraction writes the malicious variant to the same path, defeating the integrity check. No confirmed working exploit code is marked in the input; VulnCheck's advisory and GitHub issue #587 describe the technique.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 25, 2026

An integrity bypass in the Node.js archiving library adm-zip (through version 0.6.1) allows a crafted ZIP to defeat duplicate-entry validation by registering the same target file under canonically equivalent names such as './hello.txt' and 'hello.txt'. Applications that follow a validate-then-extract pattern - approving an archive by reading an entry with getEntry() or readAsText(), then unpacking it with extractAllTo() - can therefore approve benign content and still write attacker-chosen content to the expected path. This is a medium-severity integrity issue affecting npm consumers of adm-zip at or below 0.6.1; no public exploit code was identified at time of analysis and there is no CISA KEV confirmation of active exploitation, while the vulnerability is inert for applications that extract untrusted archives without relying on a prior content-validation step.

RemediationAI

No vendor-released patched version is identified in the available data; track https://github.com/cthackers/adm-zip/issues/587 and the GitHub repository for a fix release above 0.6.1, and pin or upgrade as soon as one is published. Until then, applications using the validate-then-extract pattern should stop trusting adm-zip's own duplicate detection: normalize every entry name before both validation and extraction (strip leading './' and redundant separators, resolve '..' segments, apply a consistent case-folding policy) and reject any archive containing two entries whose normalized paths collide - the trade-off is that legitimate archives with redundant path spellings will be refused. A stronger control is to extract into a fresh, isolated directory first and then verify the written files by hash or size against the content that was originally approved, rather than approving in-memory entry content via getEntry() or readAsText(); this costs an extra I/O pass and temporary disk space but closes the mismatch entirely. Applications that never validate content before calling extractAllTo() gain nothing from adm-zip's check and should instead enforce their own path-traversal and overwrite policy on the destination directory. If neither workaround is feasible, route untrusted ZIP handling through a separate extraction service with filesystem-level uniqueness enforcement.

Affected VersionsENISA

adm-zip 0 ≤0.6.1

Affected Packages

euvd adm_zip no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CWE-436 (Interpretation Conflict) is the root cause: adm-zip's readEntries() logic compares raw entry-name strings when detecting duplicates, but the ZIP format and the underlying filesystem resolve different strings to the same path. A name like './hello.txt' normalizes to 'hello.txt' once extracted, so the library's de-duplication check treats the two entries as distinct objects while the operating system overwrites one with the other. The referenced source points at exactly these surfaces: the readEntries() check in zipFile.js (lines 81-92), the getEntry() path in adm-zip.js (line 87), and the utility normalization helper in util/utils.js (line 383). The practical consequence is a split between what a caller validates and what is written to disk - a classic validation/extraction mismatch rather than a memory-safety flaw. The affected technology is the pure-JavaScript adm-zip package distributed via npm and widely embedded in Node.js file-upload, build-artifact, document-import, and plugin-installation handlers.

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

Vendor (VulnCheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 3.7 LOW

Archive is attacker-supplied over the network (AV:N, PR:N, UI:N); exploitation depends on the app's validate-then-extract pattern (AC:H); only integrity is affected (I:L, C:N, A:N).

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

DescriptionCVE.org

adm-zip through 0.6.1 contains a duplicate-entry validation bypass that allows attackers to evade the readEntries() check by using canonically equivalent entry names like './hello.txt' and 'hello.txt'. Attackers can craft ZIP archives where getEntry() or readAsText() validates benign content while extractAllTo() writes malicious content to the same path, bypassing integrity checks.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
High
adm-zip is a very widely used Node.js/npm ZIP-handling library
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Yes
Human Impact· derived
High

Priority Score

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

Vendor StatusVendor

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