Skip to main content

zip2 (Rust crate) CVE-2026-115909

| EUVDEUVD-2026-109987 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-26 GitHub_M
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
    Deliver crafted ZIP to extraction endpoint
  2. Delivery
    Entry flagged symlink with ZIP64 size 2^62
  3. Exploit
    ZipArchive::extract calls Vec::with_capacity before reading
  4. Execution
    Infallible allocation refused, uncatchable SIGABRT
  5. Impact
    Process terminates, repeatable denial of service

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an application running on a Unix or Windows target (the vulnerable branch is gated behind #[cfg(any(unix, windows))]) that calls ZipArchive::extract() on an attacker-supplied archive, using default features and no special configuration. The malicious archive must contain an entry whose external-attributes field sets the S_IFLNK bit (so is_symlink() returns true) and whose central-directory uncompressed_size - widened via a ZIP64 extended-information extra field - declares an impossibly large value (the PoC uses 2^62, which exceeds the 47-bit x86-64 user address space and aborts deterministically regardless of installed RAM or overcommit policy). Limiting factors: the target application must actually extract untrusted ZIPs, and only versions 1.3.0 through 8.x are affected (fixed in 9.0.0). Under a ulimit -v cap or a memory-constrained container the threshold drops low enough that a plain 32-bit uncompressed_size with no ZIP64 field suffices, so such limits lower the bar rather than mitigating the flaw. No authentication or user interaction beyond submitting the archive is needed.

Impact

All impact signals converge on availability only: the vendor CVSS vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H scores 7.5 with C:N and I:N, and the GHSA advisory explicitly states no memory unsafety, no out-of-bounds access, no disclosure and no data corruption - this is a pure denial-of-service (CWE-400, with the advisory also citing CWE-789). The low attack complexity and lack of authentication or user interaction are credible: a single 112-byte archive aborts the process, the reporter verified the crash cannot be contained by catch_unwind, a worker thread, or a pre-flight check, and it is repeatable at will. The vuln.today priority is 'this_week' and a patch is available, which fits an easily-triggered but availability-only flaw rather than an emergency. No CISA KEV listing is present and no EPSS score was supplied in the input, so widespread-exploitation probability cannot be quantified from the data given - this should be read as missing data, not as evidence of low risk. The AV:N rating assumes the malicious archive reaches the application over a network path (upload handlers, mail attachments, artifact/package ingestion, backup restore, container-layer extraction are the advisory's named patterns); for purely local file processing the practical vector is closer to local delivery. Real priority is moderate-to-high for any service that extracts attacker-supplied ZIPs with zip2 1.3.0-8.x, and negligible for code paths that never call ZipArchive::extract on untrusted input.

Exploit ScenarioDerived

An attacker uploads (or emails, or submits as a package/artifact) a 112-byte ZIP whose single entry carries the S_IFLNK symlink attribute and a ZIP64 extra field declaring an uncompressed size of 2^62 bytes. When the server calls ZipArchive::extract, the symlink branch calls Vec::with_capacity on that declared size before reading any data; the infallible allocation is refused and the process aborts with SIGABRT (exit 134). A working, reporter-verified proof-of-concept harness and base64 payload are published in the vendor advisory, and the crash can be replayed on demand to keep the service down.

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

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

Alert me

AnalysisAIv1 – Oct 26, 2026

Process abort denial of service in the Rust zip crate (versions 1.3.0 through 8.x) allows a tiny, crafted archive to kill any application that calls ZipArchive::extract() on untrusted input. The symlink branch of extraction reserves a buffer using the attacker-declared ZIP64 uncompressed_size before reading a single byte; Vec::with_capacity is infallible, so a 112-byte archive declaring 2^62 bytes terminates the process via SIGABRT - an abort that catch_unwind, panic = "unwind" and worker-thread isolation all fail to contain. Impact is availability only (C:N/I:N/A:H, 7.5); the vendor GHSA publishes a public reproducer, no confirmed active exploitation is reported in the available data, and the flaw is fixed in 9.0.0.

RemediationAI

Vendor-released patch: upgrade the zip crate to 9.0.0 (release tag https://github.com/zip-rs/zip2/releases/tag/v9.0.0), which introduces a MAX_SYMLINK_TARGET_LEN constant of 4096 bytes checked against file.size() before allocation, returning an invalid! error for oversized symlink entries; the same guard is applied to src/read/stream.rs as defence in depth even though that symlink path is currently unreachable. The change is in PR https://github.com/zip-rs/zip2/pull/984 (commit a543a1fc8f3f3eef36f27bb137230295284cdb98) and guidance is in GHSA-q7v9-x93c-xqv3. Updating is the only complete fix: the vendor states the abort is not mitigable at the call site with catch_unwind, a worker thread, or a pre-flight metadata check, and notes that a ulimit -v cap or a memory-constrained container lowers the allocation threshold and therefore increases, rather than reduces, exposure. Because the trigger is a hard process abort, the practical interim measure for teams that cannot rebuild immediately is to stop passing untrusted archives to ZipArchive::extract() on Unix or Windows targets until the dependency is bumped to 9.0.0; given the this_week priority label and an availability-only 7.5 score, schedule the upgrade in the current patch cycle rather than as an emergency change.

Affected VersionsENISA

zip2 1.3.0, < 9.0.0

Affected Packages

euvd zip2 fix: 9.0.0

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

The defect is an uncontrolled-resource-consumption / uncontrolled-memory-allocation issue (CWE-400, with the advisory also citing CWE-789) in the zip crate's src/read/mod.rs symlink handling. Two fields of the central directory are fully attacker-controlled: ZipFile::is_symlink() is derived solely from the S_IFLNK bit in the external-attributes field, and ZipFile::size() returns uncompressed_size verbatim, which a ZIP64 extended-information extra field can widen to a full 64-bit value. Neither is cross-checked against the compressed size, the remaining archive length, or any platform-appropriate bound for a path. extract_internal() therefore executes Vec::with_capacity(file.size() as usize) before any entry data is read; because that API is infallible, allocator refusal invokes handle_alloc_error(), which aborts the process rather than panicking, so the failure is invisible to catch_unwind, is unaffected by panic = "unwind", and cannot be fenced off in a worker thread. The abort requires only an address-space reservation - pages are never touched, so resident memory stays flat and this is process termination rather than memory exhaustion. Sizes around 2^62 exceed the 47-bit x86-64 user address space and abort deterministically; sizes at or above 2^63 instead trip Vec's capacity check and produce a catchable panic, an easy band for an attacker to avoid. A ulimit -v cap or a memory-constrained container lowers the abort threshold so that a plain 32-bit size with no ZIP64 field suffices, meaning such limits widen exposure rather than mitigate it. The vendor already applies a comparable guard to the attacker-controlled number_of_files field in ZipArchive::new(); the symlink branch received neither guard.

Know when Rust 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

A small crafted archive reaching an extraction endpoint triggers the abort with no auth or user interaction (AV:N/AC:L/PR:N/UI:N); impact is availability only (A:H, C:N/I:N) per the advisory.

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

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
Oct 26, 2026 - 17:02 EUVD
CVE Published
Oct 26, 2026 - 16:39 cve.org
HIGH 7.5

DescriptionCVE.org

zip is a zip library for Rust that supports reading and writing simple ZIP files. From 1.3.0 until 9.0.0, ZipArchive::extract in src/read/mod.rs calls Vec::with_capacity for a symbolic link target using the attacker-controlled ZIP64 uncompressed_size before reading entry data. A small archive can request an impossible capacity, causing the infallible allocation path to abort the process before the entry is validated. The failure cannot be contained with catch_unwind or a worker thread, allowing repeated denial of service in archive-processing applications. This issue is fixed in version 9.0.0.

Technical POC Analysis

CWE-400 (Uncontrolled Resource Consumption), specifically the memory-allocation variant the advisory also tags as CWE-789 (allocation sized from an untrusted 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 high-severity availability flaw in the widely-used Rust zip crate (versions 1.3.0 through 8.x) allows a trivially small malicious archive to crash any application that extracts untrusted ZIP files via ZipArchive::extract(). Because this is a common library dependency, the exposure spans many internal services and Rust-based products that process user-supplied archives. Leadership should care because a single 112-byte upload can terminate a service process, creating a low-cost denial-of-service path against any externally reachable release pipeline, file-ingestion system, or customer-facing upload feature.

Business Impact: High
Compensating Controls

Vendor-released patch: 9.0.0

Threat Intelligence Overview

EPSS Score
0.5%
Top 60% exploitable
Prevalence
Medium
popular Rust ZIP crate, common in Rust apps but ecosystem-scoped
Data Quality
4 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment 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 HIGH
CISA KEV No
Public POC No
EPSS 0.5%
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
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Rust

View all
CVE-2024-3566 CRITICAL POC
9.8 Apr 10

Command injection via Windows CreateProcess argument parsing affects multiple language runtimes and tooling (Node.js, PH

CVE-2021-31162 CRITICAL POC
9.8 Apr 14

In the standard library in Rust before 1.52.0, a double free can occur in the Vec::from_iter function if freeing the ele

CVE-2021-28879 CRITICAL POC
9.8 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer ove

CVE-2026-58491 CRITICAL POC
9.3 Sep 21

Stored cross-site scripting and open redirect in Warpgate's SSO endpoints (versions prior to 0.25.5) allow an unauthenti

CVE-2021-29922 CRITICAL POC
9.1 Aug 07

library/std/src/net/parser.rs in Rust before 1.53.0 does not properly consider extraneous zero characters at the beginni

CVE-2026-77620 HIGH POC
8.7 Sep 22

Denial of service in the Vector observability pipeline's `logstash` source (versions 0.15.0 through 0.56.x) allows a rem

CVE-2019-12083 HIGH POC
8.1 May 13

The Rust Programming Language Standard Library 1.34.x before 1.34.2 contains a stabilized method which, if overridden, c

CVE-2026-96889 HIGH POC
7.8 Sep 23

Use-after-free in librsvg during rendering of crafted SVG documents with nested XInclude directives and duplicate entity

CVE-2021-28878 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once fo

CVE-2021-28875 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.50.0, read_to_end() does not validate the return value from Read in an unsafe c

CVE-2019-16760 HIGH POC
7.5 Sep 30

Cargo prior to Rust 1.26.0 may download the wrong dependency if your package.toml file uses the `package` configuration

CVE-2026-115905 CRITICAL
10.0 Oct 26

A parser differential in the Rust `zip` crate (zip2) through 9.0.4 lets a crafted archive present different filenames to

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