Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessUpload crafted ZIP64 archive to extraction service
-
DeliveryDeclared uncompressed size set to u64::MAX for legacy Shrink entry
-
ExploitZipArchive::extract() reserves capacity before validation
-
ExecutionCapacity-overflow panic aborts process
-
ImpactDenial 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 BOTH a specific build configuration and a specific API path: the target application must be compiled with the opt-in |
| Impact | All severity signals here describe a single impact: denial of service. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) correctly reflects a network-reachable, low-complexity, unauthenticated availability-only flaw with no confidentiality or integrity impact - an unhandled Rust panic (capacity overflow) that aborts the process. The GHSA advisory supplies a complete, demonstrated 149-byte reproducer with observed panic output, so trigger reliability is high and deterministic. However, the real-world risk is strongly gated by a configuration prerequisite the raw CVSS score does not capture: the vulnerable legacy Shrink/Reduce/Implode decoders are only compiled when the opt-in |
| Exploit ScenarioDerived | A service that accepts user-uploaded ZIP files and extracts them with zip2 built using the |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 26, 2026
Denial of service in the Rust zip2 crate affects versions 5.1.0 through 8.x when an application is built with the opt-in legacy-zip feature and extracts an attacker-supplied archive containing a Shrink, Reduce, or Implode entry with a forged ZIP64 uncompressed size. The declared size is passed to Vec::reserve before the compressed stream is validated, causing a deterministic capacity-overflow panic (CWE-400/CWE-789) that can terminate the archive-processing process. The issue is fixed in 9.0.0; a public proof-of-concept reproducer is documented in the GHSA advisory, there is no CISA KEV confirmation in the provided intelligence, and exposure is limited by the non-default legacy-zip build configuration and a ZipArchive::extract()-style read path.
RemediationAI
Vendor-released patch: upgrade zip2 to 9.0.0 (https://github.com/zip-rs/zip2/releases/tag/v9.0.0), which caps speculative preallocation at 1 MiB in the legacy decoders. If upgrading immediately is not possible, remove the legacy-zip Cargo feature from the dependency graph so the vulnerable Shrink/Reduce/Implode decoders are not compiled; the trade-off is loss of support for archives using those legacy compression methods. Applications that must keep legacy support should avoid calling ZipArchive::extract() or otherwise reading entries from untrusted archives until the fix is deployed, and can backport the upstream changes from PR #991 or commit 8b4991288b79ad11cce201c2d785d5baa795bd3e; the vendor advisory is at https://github.com/zip-rs/zip2/security/advisories/GHSA-9hj8-73fh-9963.
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
zip2 is a Rust ZIP library, and the legacy-zip Cargo feature compiles support for older compression methods including Shrink, Reduce, and Implode. In these decoders, the entry's declared uncompressed size comes from ZIP metadata, and ZIP64 extra fields let an archive declare a 64-bit size independent of the actual compressed payload. The vulnerable code reads the compressed bytes, then calls self.stream.reserve(self.uncompressed_size as usize) before hwunshrink(), hwexpand(), or hwexplode() validates or decodes the stream; a value such as u64::MAX produces a capacity overflow panic (CWE-400 uncontrolled resource consumption, CWE-789 excessive allocation). The upstream fix in PR #991 introduces a MAX_PREALLOC cap of 1 MiB so buffers grow geometrically instead of reserving an attacker-controlled size. The CVSS 3.1 vector is AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, but the practical precondition is that legacy-zip is enabled, which is not the default.
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
Attacker-supplied archive is processed remotely with a reliable deterministic panic (AV:N/AC:L/PR:N/UI:N); impact is availability-only process termination with no confidentiality or integrity effect.
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 5.1.0 until 9.0.0, applications built with the legacy-zip feature can reserve output capacity from an attacker-controlled ZIP64 uncompressed size before validating the compressed stream. The ShrinkDecoder path in src/legacy/shrink.rs can panic with a capacity overflow during ZipArchive::extract, and the Reduce and Implode decoders contain the same unbounded preallocation pattern. An unhandled panic can terminate an archive-processing service. This issue is fixed in version 9.0.0.
Technical POC Analysis
The flaw is uncontrolled resource consumption / excessive allocation from an untrusted size value (CWE-400, CWE-789) in the legacy Shrink decoder.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-115907 is a high-severity denial-of-service flaw in the Rust zip2 crate that can crash archive-processing services built with the opt-in 'legacy-zip' feature when handling malicious archives. This affects any application that extracts attacker-supplied ZIP files using the vulnerable crate versions, potentially causing service outages. Leadership should prioritize remediation because a confirmed crash could disrupt operations and impact availability for customers or internal users.
Apply vendor patch (version 9.0.0); if patching is delayed, disable the 'legacy-zip' feature or avoid extracting untrusted archives.
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-109984
NVD
CVE.org
EPSS
GitHub
Exploit-DB