Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDeliver crafted ZIP to extraction endpoint
-
DeliveryEntry flagged symlink with ZIP64 size 2^62
-
ExploitZipArchive::extract calls Vec::with_capacity before reading
-
ExecutionInfallible allocation refused, uncatchable SIGABRT
-
ImpactProcess 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
Vendor-released patch: 9.0.0
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Command injection via Windows CreateProcess argument parsing affects multiple language runtimes and tooling (Node.js, PH
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
In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer ove
Stored cross-site scripting and open redirect in Warpgate's SSO endpoints (versions prior to 0.25.5) allow an unauthenti
library/std/src/net/parser.rs in Rust before 1.53.0 does not properly consider extraneous zero characters at the beginni
Denial of service in the Vector observability pipeline's `logstash` source (versions 0.15.0 through 0.56.x) allows a rem
The Rust Programming Language Standard Library 1.34.x before 1.34.2 contains a stabilized method which, if overridden, c
Use-after-free in librsvg during rendering of crafted SVG documents with nested XInclude directives and duplicate entity
In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once fo
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
Cargo prior to Rust 1.26.0 may download the wrong dependency if your package.toml file uses the `package` configuration
A parser differential in the Rust `zip` crate (zip2) through 9.0.4 lets a crafted archive present different filenames to
EUVD-2026-109987
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB