CVE-2026-115905
zip: Critical Parser Differential & Security Control Bypass via Dual-Header Inconsistencies (Zip Cloaking) Leading to Arbitrary File Overwrite & RCE
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
10.0
zip: Critical Parser Differential & Security Control Bypass via Dual-Header Inconsistencies (Zip Cloaking) Leading to Arbitrary File Overwrite & RCE
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
CVE-2026-115905- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L - Weakness
- CWE-20, CWE-436
- Updated
- 2026-11-02
EUVDEUVD-2026-109981
10.0
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
EUVD-2026-109981- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-m665-v7pm-7grj
10.0
zip: Critical Parser Differential & Security Control Bypass via Dual-Header Inconsistencies (Zip Cloaking) Leading to Arbitrary File Overwrite & RCE
Summary
A critical architectural parser differential exists in the zip crate (<= 9.0.4) between random-access archive readers (ZipArchive) and streaming readers (ZipStreamReader). ZipArchive considers the Central Directory File Header (CDFH) authoritative and ignores the filename declared in the Local File Header (LFH). In contrast, ZipStreamReader relies exclusively on the Local File Header (LFH) when extracting files to the filesystem.
This discrepancy enables ZIP archives to appear to have different file paths and contents according to which tool is reading them.
Details
Architectural Root Cause
In the PKWARE ZIP archive format, every file entry is defined in two distinct locations:
- Local File Header (LFH): Precedes the compressed payload of each file in the body of the archive.
- Central Directory File Header (CDFH): Stored in a contiguous index at the end of the archive.
In zip2:
src/read/zip_archive.rs:ZipArchiveparses the central directory intoSharedBuilder.files. All file lookups by index or name read exclusively from the CDFH table, completely ignoring the filename present in the LFH.src/read/stream.rs:L86-L141:ZipStreamReader::visitandZipStreamReader::extractread sequentially from the stream without verifying the central directory index. Each entry is parsed viaread_zipfile_from_streamand written to disk using the unverified filename declared in the LFH:// src/read/stream.rs fn visit_file<R: Read>(&mut self, file: &mut ZipFile<'_, R>) -> ZipResult<()> { file.safe_prepare_path(&self.outpath, &mut outpath, None::<&(_, fn(&Path) -> bool)>)?; let mut outfile = fs::File::create(&outpath)?; io::copy(file, &mut outfile)?; Ok(()) }src/write.rs:L1552: The crate explicitly exposesshallow_copy_file, an API that constructs dual-header desynchronizations by adding a new CDFH entry with an alias name pointing to an existing file without updating the original LFH.
Threat Scenario & Severity Justification (10.0 / 9.9 Critical)
- Security Control Evasion: An adversary crafts a ZIP archive where:
- Central Directory Header declares:
doc_report.pdf(Clean document) - Local File Header declares:
cron_worker.sh(Malicious root backdoor)
- Central Directory Header declares:
- The archive is uploaded through a web portal or API endpoint protected by security gateways (WAF, Anti-Virus, Content Disarm & Reconstruction). The security gateway inspects the archive using
ZipArchive(or similar CDFH-first parsers), detects onlydoc_report.pdf, and approves the file. - The backend worker or cloud function receives the approved archive and extracts it using
ZipStreamReader::extract.ZipStreamReaderreads the LFH and overwritescron_worker.sh. - Full Compromise (CIA = High): The legitimate production health checker / service script is destroyed (Availability = High / DoS), while the attacker's backdoor payload is implanted (Integrity = High / RCE).
Proof of Concept
The following automated integration test reproducibly demonstrates the complete CVSS 10.0 / 9.9 exploit chain (Security Gateway Evasion -> Arbitrary File Overwrite -> RCE & DoS) against zip2:
use std::fs;
use std::io::{Cursor, Write};
use tempfile::tempdir;
use zip::unstable::stream::ZipStreamReader;
use zip::write::SimpleFileOptions;
use zip::{ZipArchive, ZipWriter};
// Simulated Security Gateway (inspects CDFH via ZipArchive)
fn security_gateway_inspection(archive_bytes: &[u8]) -> Result<(), String> {
let mut archive = ZipArchive::new(Cursor::new(archive_bytes)).unwrap();
for i in 0..archive.len() {
let name = archive.by_index(i).unwrap().name().unwrap().to_string();
if name.ends_with(".sh") || name.ends_with(".exe") {
return Err(format!("MALWARE DETECTED: '{}' blocked!", name));
}
if !name.ends_with(".pdf") {
return Err("Policy violation: only PDFs allowed!".into());
…
- Record
GHSA-m665-v7pm-7grj- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L - Weakness
- CWE-20, CWE-436
- Updated
- 2026-11-02
NVD
10.0
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
CVE-2026-115905- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Weakness
- CWE-20, CWE-436
- Updated
- 2026-11-02
OSV
10.0
zip: Critical Parser Differential & Security Control Bypass via Dual-Header Inconsistencies (Zip Cloaking) Leading to Arbitrary File Overwrite & RCE
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
CVE-2026-115905- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L - Weakness
- CWE-20, CWE-436
- Updated
- 2026-11-07
OSVDEBIAN-CVE-2026-115905
10.0
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
DEBIAN-CVE-2026-115905- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-03
Show 9 moreShow less
OSVGHSA-m665-v7pm-7grj
10.0
zip: Critical Parser Differential & Security Control Bypass via Dual-Header Inconsistencies (Zip Cloaking) Leading to Arbitrary File Overwrite & RCE
Summary
A critical architectural parser differential exists in the zip crate (<= 9.0.4) between random-access archive readers (ZipArchive) and streaming readers (ZipStreamReader). ZipArchive considers the Central Directory File Header (CDFH) authoritative and ignores the filename declared in the Local File Header (LFH). In contrast, ZipStreamReader relies exclusively on the Local File Header (LFH) when extracting files to the filesystem.
This discrepancy enables ZIP archives to appear to have different file paths and contents according to which tool is reading them.
Details
Architectural Root Cause
In the PKWARE ZIP archive format, every file entry is defined in two distinct locations:
- Local File Header (LFH): Precedes the compressed payload of each file in the body of the archive.
- Central Directory File Header (CDFH): Stored in a contiguous index at the end of the archive.
In zip2:
src/read/zip_archive.rs:ZipArchiveparses the central directory intoSharedBuilder.files. All file lookups by index or name read exclusively from the CDFH table, completely ignoring the filename present in the LFH.src/read/stream.rs:L86-L141:ZipStreamReader::visitandZipStreamReader::extractread sequentially from the stream without verifying the central directory index. Each entry is parsed viaread_zipfile_from_streamand written to disk using the unverified filename declared in the LFH:// src/read/stream.rs fn visit_file<R: Read>(&mut self, file: &mut ZipFile<'_, R>) -> ZipResult<()> { file.safe_prepare_path(&self.outpath, &mut outpath, None::<&(_, fn(&Path) -> bool)>)?; let mut outfile = fs::File::create(&outpath)?; io::copy(file, &mut outfile)?; Ok(()) }src/write.rs:L1552: The crate explicitly exposesshallow_copy_file, an API that constructs dual-header desynchronizations by adding a new CDFH entry with an alias name pointing to an existing file without updating the original LFH.
Threat Scenario & Severity Justification (10.0 / 9.9 Critical)
- Security Control Evasion: An adversary crafts a ZIP archive where:
- Central Directory Header declares:
doc_report.pdf(Clean document) - Local File Header declares:
cron_worker.sh(Malicious root backdoor)
- Central Directory Header declares:
- The archive is uploaded through a web portal or API endpoint protected by security gateways (WAF, Anti-Virus, Content Disarm & Reconstruction). The security gateway inspects the archive using
ZipArchive(or similar CDFH-first parsers), detects onlydoc_report.pdf, and approves the file. - The backend worker or cloud function receives the approved archive and extracts it using
ZipStreamReader::extract.ZipStreamReaderreads the LFH and overwritescron_worker.sh. - Full Compromise (CIA = High): The legitimate production health checker / service script is destroyed (Availability = High / DoS), while the attacker's backdoor payload is implanted (Integrity = High / RCE).
Proof of Concept
The following automated integration test reproducibly demonstrates the complete CVSS 10.0 / 9.9 exploit chain (Security Gateway Evasion -> Arbitrary File Overwrite -> RCE & DoS) against zip2:
use std::fs;
use std::io::{Cursor, Write};
use tempfile::tempdir;
use zip::unstable::stream::ZipStreamReader;
use zip::write::SimpleFileOptions;
use zip::{ZipArchive, ZipWriter};
// Simulated Security Gateway (inspects CDFH via ZipArchive)
fn security_gateway_inspection(archive_bytes: &[u8]) -> Result<(), String> {
let mut archive = ZipArchive::new(Cursor::new(archive_bytes)).unwrap();
for i in 0..archive.len() {
let name = archive.by_index(i).unwrap().name().unwrap().to_string();
if name.ends_with(".sh") || name.ends_with(".exe") {
return Err(format!("MALWARE DETECTED: '{}' blocked!", name));
}
if !name.ends_with(".pdf") {
return Err("Policy violation: only PDFs allowed!".into());
…
- Record
GHSA-m665-v7pm-7grj- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L - Weakness
- CWE-20, CWE-436
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-115905
10.0
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
UBUNTU-CVE-2026-115905- CVSS 4.0
- 10.0 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L - Updated
- 2026-11-02
OSVAZL-112214 No score
CVE-2026-115905 affecting package rust 1.75.0-31
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
AZL-112214- Updated
- 2026-11-05
OSVAZL-112223 No score
CVE-2026-115905 affecting package rust 1.98.1-1
zip is a zip library for Rust that supports reading and writing simple ZIP files. Through 9.0.4, ZipArchive treats Central Directory File Header filenames as authoritative while ZipStreamReader extracts using Local File Header filenames without reconciling the duplicate metadata in src/read/stream.rs. A crafted archive can therefore appear benign to a component that inspects the central directory but cause a streaming extractor to write a different attacker-selected path and content, potentially overwriting files used by a downstream service. This issue is fixed in version 9.0.5.
- Record
AZL-112223- Updated
- 2026-11-05
OSVopenSUSE-SU-2026:12307-1 No score
python313-uv-0.13.6-1.1 on GA media
These are all security issues fixed in the python313-uv-0.13.6-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12307-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12333-1 No score
keylime-ima-policy-0.2.10+12-1.1 on GA media
These are all security issues fixed in the keylime-ima-policy-0.2.10+12-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12333-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12454-1 No score
gleam-1.19.2-1.1 on GA media
These are all security issues fixed in the gleam-1.19.2-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12454-1- Updated
- 2026-11-07
OSVSUSE-SU-2026:4930-1 No score
Security update for rust-keylime
This update for rust-keylime fixes the following issue:
- CVE-2026-115905: zip: security control bypass via parser differential between central directory and local headers (bsc#1287921)
- CVE-2026-115906: zip: authentication bypass in AES encrypted entries due to improper HMAC verification (bsc#1287921)
- CVE-2026-115907: zip: denial of service via unbounded memory allocation in legacy decoders (bsc#1287921)
- CVE-2026-115908: zip: path traversal via lexical symlink validation during extraction (bsc#1287921)
- CVE-2026-115909: zip: denial of service via uncontrolled memory allocation on symlink targets (bsc#1287921)
Changes for rust-keylime:
- Update to version 0.2.10+12:
- log Agent UUID at push agent startup
- Limit actix-web workers
- Fix clippy needless_late_init warnings
- Unwrap OCTET STRING wrapped EK certificates
- build(deps): bump rand from 0.9.4 to 0.10.1
- build(deps): bump glob from 0.3.3 to 0.3.4
- build(deps): bump reqwest from 0.13.3 to 0.13.4
- Check shutdown marker inside ml_extend loop
- Fix clippy useless_borrows_in_formatting warnings
- build(deps): bump tokio from 1.52.2 to 1.53.1
- Fix payload key upgrade regression by falling back to mTLS key
- Accept any RSA key size for payload encryption
- Bump version to 0.2.10
- keylime: use runtime OpenSSL algorithm detection instead of compile-time symbols
- Record
SUSE-SU-2026:4930-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:4931-1 No score
Security update for rust-keylime
This update for rust-keylime fixes the following issue:
- CVE-2026-115905: zip: security control bypass via parser differential between central directory and local headers (bsc#1287921)
- CVE-2026-115906: zip: authentication bypass in AES encrypted entries due to improper HMAC verification (bsc#1287921)
- CVE-2026-115907: zip: denial of service via unbounded memory allocation in legacy decoders (bsc#1287921)
- CVE-2026-115908: zip: path traversal via lexical symlink validation during extraction (bsc#1287921)
- CVE-2026-115909: zip: denial of service via uncontrolled memory allocation on symlink targets (bsc#1287921)
Changes for rust-keylime:
- Update to version 0.2.10+12:
- log Agent UUID at push agent startup
- Limit actix-web workers
- Fix clippy needless_late_init warnings
- Unwrap OCTET STRING wrapped EK certificates
- build(deps): bump rand from 0.9.4 to 0.10.1
- build(deps): bump glob from 0.3.3 to 0.3.4
- build(deps): bump reqwest from 0.13.3 to 0.13.4
- Check shutdown marker inside ml_extend loop
- Fix clippy useless_borrows_in_formatting warnings
- build(deps): bump tokio from 1.52.2 to 1.53.1
- Fix payload key upgrade regression by falling back to mTLS key
- Accept any RSA key size for payload encryption
- Bump version to 0.2.10
- keylime: use runtime OpenSSL algorithm detection instead of compile-time symbols
- Record
SUSE-SU-2026:4931-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
zipcrates.io |
through 9.0.4 | 9.0.5 |
rustAzure Linux:3 |
through 1.75.0-31 | None known |
rustAzure Linux:3 |
1.85.0 to 1.98.1-1 | None known |
rust-zipDebian:12 |
All versions, plus listed versions 0.6.3-30.6.6-10.6.6-20.6.6-30.6.6-4 Show 9 moreShow less0.6.6-52.5.0-15.1.1+dfsg-15.1.1-15.1.1-25.1.1-35.1.1-49.0.5+ds-19.1.3+ds-1 |
None known |
rust-zipDebian:13 |
All versions, plus listed versions 2.5.0-15.1.1+dfsg-15.1.1-15.1.1-25.1.1-35.1.1-49.0.5+ds-19.1.3+ds-1 |
None known |
rust-zipDebian:14 |
All versions, plus listed versions 2.5.0-15.1.1+dfsg-15.1.1-15.1.1-25.1.1-35.1.1-49.0.5+ds-19.1.3+ds-1 |
None known |
zipcrates.io |
before 9.0.5 | 9.0.5 |
rust-keylimeSUSE:Linux Enterprise Micro 5.4 From an advisory covering 5 CVEs |
before 0.2.10+12-150400.3.22.1 | 0.2.10+12-150400.3.22.1 |
rust-keylimeSUSE:Linux Enterprise Micro 5.5 From an advisory covering 5 CVEs |
before 0.2.10+12-150500.3.22.1 | 0.2.10+12-150500.3.22.1 |
rust-zipUbuntu:20.04:LTS |
All versions, plus listed versions 0.5.0-10.5.3-10.5.3-2 |
None known |
Show 7 moreShow less
| Package | Affected | Fixed |
|---|---|---|
rust-zipUbuntu:22.04:LTS |
All versions, plus listed versions 0.5.8-20.5.13-1 |
None known |
rust-zipUbuntu:24.04:LTS |
All versions, plus listed versions 0.6.6-10.6.6-2 |
None known |
rust-zipUbuntu:26.10 |
All versions, plus listed versions 5.1.1-35.1.1+dfsg-1 |
None known |
rust-zipUbuntu:26.04:LTS |
All versions, plus listed versions 2.5.0-15.1.1-25.1.1-3 |
None known |
python-uvopenSUSE:Tumbleweed From an advisory covering 3 CVEs |
before 0.13.6-1.1 | 0.13.6-1.1 |
rust-keylimeopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 0.2.10+12-1.1 | 0.2.10+12-1.1 |
gleamopenSUSE:Tumbleweed From an advisory covering 3 CVEs |
before 1.19.2-1.1 | 1.19.2-1.1 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | foxcornlab/zip-cloaking-scanner | 2026-10-27 |
| PoC in GitHub | cosmonic-labs/demo-zip-rce-sandbox | 2026-10-28 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | OSV | |
| affected | OSV | |
| facts | OSV | |
| affected, exploits | EUVD, OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-115905 is a critical vulnerability (CVSS 10.0) in Zip-rs Zip2, published October 26, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.32%, the 25th percentile. Fixed in zip 9.0.5.
References
github.com/zip-rs/zip2/security/advisories/GHSA-m665-v7pm-7grj
github.com/zip-rs/zip2/commit/8068ab480ccf8daa7411424e365fcdbe6d09443e
github.com/zip-rs/zip2/releases/tag/v9.0.5
nvd.nist.gov/vuln/detail/CVE-2026-115905
github.com/advisories/GHSA-m665-v7pm-7grj
github.com/CVEProject/cvelistV5/tree/main/cves/2026/115xxx/CVE-2026-115905.json
Show 18 moreShow less
security-tracker.debian.org/tracker/CVE-2026-115905
github.com/zip-rs/zip2
suse.com/support/update/announcement/2026/suse-su-20264930-1
bugzilla.suse.com/1287921
suse.com/security/cve/CVE-2026-115905
suse.com/security/cve/CVE-2026-115906
suse.com/security/cve/CVE-2026-115907
suse.com/security/cve/CVE-2026-115908
suse.com/security/cve/CVE-2026-115909
suse.com/support/update/announcement/2026/suse-su-20264931-1
ubuntu.com/security/CVE-2026-115905
cve.org/CVERecord?id=CVE-2026-115905
github.com/zip-rs/zip2/security/advisories/ghsa-m665-v7pm-7grj
bugs.debian.org/cgi-bin/bugreport.cgi?bug=1152227
security-tracker.debian.org/tracker/cve-2026-115905
github.com/cveproject/cvelistv5/tree/main/cves/2026/115xxx/cve-2026-115905.json
nvd.nist.gov/vuln/detail/cve-2026-115905
suse.com/security/cve/CVE-2026-103061
Left out here: the rest of 2 source descriptions. The JSON record has them.