Skip to main content

adm-zip CVE-2026-76845

| EUVDEUVD-2026-64851 MEDIUM
Improper Link Resolution Before File Access (CWE-59)
2026-08-24 VulnCheck GHSA-vwc7-r8mq-g2x9
6.8
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Recon
    Identify shared or predictable extraction directory
  2. Delivery
    Plant symlink inside extraction root pointing to sensitive target file
  3. Exploit
    Supply or influence ZIP archive with matching entry name
  4. Install
    Trigger extraction call with overwrite=true
  5. C2
    fs.openSync follows symlink to target outside root
  6. Execute
    Write attacker-controlled content to target file
  7. Impact
    chmod applied to target, completing file takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
Exploitation Conditions

Two conditions must both be satisfied. First, the calling application must pass overwrite: true (or the equivalent truthy flag) to extractAllTo, extractAllToAsync, or extractEntryTo - without this flag the fs.existsSync pre-check resolves the symlink and refuses to overwrite, blocking the write. Second, the attacker must be able to create a symbolic link at a path component inside the extraction root before extraction begins - this requires filesystem write access to the extraction directory or a parent, which is achievable in shared temporary directories, multi-tenant CI workspaces, or any directory with group/world write bits. Exploitation is limited to files the extracting process has permission to write; it does not grant write access beyond the OS-enforced privilege boundary of the extracting user. The vulnerability is not exploitable through the archive entry path alone (no traversal sequence in the entry name) - the symlink must pre-exist at the destination on the host filesystem.

Impact

The CVSS 4.0 score of 6.8 (AV:L/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N) reflects the local-only attack vector and the absence of a confidentiality impact, while correctly flagging high integrity impact. The tag 'Information Disclosure' from VulnCheck appears to be a mislabeling - the actual primitive is arbitrary file write, not read. The overwrite=true flag is a hard prerequisite; this is a non-default caller configuration that significantly narrows real-world exposure compared to the raw vector suggests. The AT:N assignment in the provided CVSS 4.0 vector may understate the deployment-specific condition (overwrite must be explicitly enabled), which in CVSS 3.1 terms would drive AC to H. No EPSS data was supplied. The vulnerability is not in CISA KEV and no POC is confirmed. Real-world priority is elevated for applications that (a) extract ZIP archives to shared or predictable directories such as /tmp or CI workspace paths and (b) invoke extraction with overwrite enabled - a pattern common in build tools, artifact deployers, and archive managers. Applications extracting to fresh, process-owned directories with overwrite disabled are not exploitable.

Exploit ScenarioDerived

An attacker with write access to a shared CI workspace directory creates a symbolic link at a predictable sub-path - for example, workspace/dist/config pointing to /etc/cron.d/pwned - before a build job runs. When the CI job calls extractAllTo('workspace/dist', true) on an attacker-influenced archive containing an entry named config, adm-zip resolves the destination through the symlink and writes the archive entry's contents to /etc/cron.d/pwned, then chmods it, granting the attacker a cron execution primitive under the CI agent's privileges. No path-traversal characters appear in the archive entry name, so the sanitize check passes cleanly.

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

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

Alert me

AnalysisAIv1 – Aug 24, 2026

Symlink-following during ZIP extraction in adm-zip 0.5.9 through 0.6.0 allows a local attacker who can plant a symlink inside the extraction directory to overwrite arbitrary files accessible by the extracting process. Utils.writeFileTo calls fs.openSync without O_NOFOLLOW and performs no pre-write lstat check, so a pre-positioned symlink transparently redirects the write - and a subsequent chmod - to any target outside the extraction root without any path-traversal sequence appearing in the archive. No public exploit is identified at time of analysis and the vulnerability is not listed in CISA KEV, but the impact is high in shared or predictable extraction environments such as CI pipelines and multi-tenant temp directories.

RemediationAI

No vendor-released patch identified at time of analysis - no fix version is referenced in the VulnCheck advisory or the linked GitHub repository. Until a patch is released, the most direct compensating control is to remove the overwrite: true flag from all calls to extractAllTo, extractAllToAsync, and extractEntryTo; without overwrite enabled, the preceding fs.existsSync check (which also resolves symlinks) will decline to write through a pre-existing symlink, blocking the attack path - at the trade-off of failing on any extraction where a destination file already exists. Where overwrite must be enabled, callers should perform an fs.lstatSync check on each resolved destination path before writing and abort if the result is a symbolic link, which eliminates the vulnerable condition at the application level. Additionally, extraction directories should be created as fresh, process-owned paths (e.g., mkdtemp) rather than reusing shared or predictable locations such as /tmp or CI workspace roots, removing the attacker's ability to pre-plant a symlink. Monitor the upstream repository and VulnCheck advisory for a patched release.

Affected VersionsENISA

adm-zip 0.5.9 ≤0.6.0

Affected Packages

npm adm-zip no fix

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 (CPE: cpe:2.3:a:cthackers:adm-zip:*:*:*:*:*:*:*:*) is a pure-JavaScript Node.js library for reading and writing ZIP archives. The root cause is CWE-59 (Improper Link Resolution Before File Access - 'Link Following'). The sanitization logic in util/utils.js compares only the string representation of an archive entry path against the resolved extraction root; it does not verify filesystem object types at the destination. The file-write path in Utils.writeFileTo then calls fs.openSync(path, 'w', 0o666), which inherits the Node.js default behavior of following symbolic links. Since neither O_NOFOLLOW is passed nor an fs.lstatSync check is performed before the open, any symlink already present at a path component of the computed destination is silently followed, placing attacker-controlled content in the symlink's target. A subsequent chmod on what the code believes to be the destination file is also applied to the symlink target. The three affected extraction methods are extractAllTo, extractAllToAsync, and extractEntryTo.

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.8 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.6 MEDIUM

AC:H because overwrite=true is a non-default caller flag; AV:L for local filesystem access; S:C because writes escape the intended extraction boundary.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
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

DescriptionCVE.org

adm-zip 0.5.9 through 0.6.0 follows symbolic links at the extraction destination. Utils.sanitize in util/utils.js enforces containment by comparing only the string form of an archive entry name against the resolved extraction root, and Utils.writeFileTo opens the computed destination with fs.openSync(path, "w", 0o666), which resolves symbolic links and carries neither O_NOFOLLOW nor a pre-write fs.lstatSync check. When a path component at the destination already exists as a symbolic link pointing outside the extraction root, extractAllTo, extractAllToAsync and extractEntryTo write the entry contents through that link and then chmod its target, placing attacker-controlled content in a file outside the root without any traversal sequence appearing in the archive. Reaching the write requires overwrite to be enabled, because the preceding fs.existsSync check also resolves the link and otherwise declines. An attacker able to create a symbolic link inside a shared, reused or predictable extraction directory, such as a temporary directory or a continuous integration workspace, can overwrite any file the extracting process is permitted to write.

Blast Radius

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

Ecosystem-wide dependent count for version 0.5.9.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Medium
popular npm package used across many Node.js build and archive tools
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub VulDB

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.1%
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
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Vendor StatusVendor

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