{"id":"CVE-2026-115908","kind":"vulnerability","aliases":["CVE-2026-115908"],"related":[],"title":"zip Rust crate: symlink extraction check lets files escape destination","description":"zip is a zip library for Rust that supports reading and writing simple ZIP files. From 7.2.0 until 9.0.0, ZipArchive::extract and ZipArchive::extract_unwrapped_root_dir use safe_prepare_path in src/read/zipfile.rs and simplified_components in src/path.rs to validate symbolic link targets with a lexical prefix comparison rather than resolving each intermediate link. An attacker who knows or can guess the absolute extraction destination can create a chain whose apparent target remains under the destination while an intermediate symlink resolves outside it, allowing attacker-controlled files to be created or overwritten with the extracting process's privileges. On Windows, discarded drive and UNC prefixes can permit a single-link escape when the process has SeCreateSymbolicLinkPrivilege, such as through administrator rights or Developer Mode. This regression is distinct from CVE-2025-29787. This issue is fixed in version 9.0.0.","summary":"The zip Rust crate, versions 7.2.0 through 8.x, validates symbolic link targets during extraction with a lexical prefix check instead of resolving intermediate links. An attacker who can supply a ZIP archive and knows or guesses the extraction directory can create or overwrite files outside that directory with the extracting process's privileges.","severity":"high","cvss":7.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cargo","package","rust","zip"],"not_affected_if":["archives-trusted-only","no-extraction","versions-outside-range"],"how_to_check":"- Check the locked version of the `zip` crate in `Cargo.lock` (for example `grep -A1 'name = \"zip\"' Cargo.lock`) and see whether it is between `7.2.0` and `9.0.0`\n- Find code calling `ZipArchive::extract` or `extract_unwrapped_root_dir` that handles archives from untrusted sources","fix":"- Upgrade the `zip` crate to `9.0.0` or later\n- Until upgraded, do not extract untrusted archives with these functions","status":"open","published_at":"2026-10-26T17:17:18+00:00","first_seen_at":"2026-10-26T17:31:22+00:00","triaged_at":"2026-10-26T17:33:11+00:00","updated_at":"2026-10-26T17:33:11+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-26T17:33:11Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade the `zip` crate to `9.0.0` or later\n- Until upgraded, do not extract untrusted archives with these functions","reach":"internet","title":"zip Rust crate: symlink extraction check lets files escape destination","impact":"high","summary":"The zip Rust crate, versions 7.2.0 through 8.x, validates symbolic link targets during extraction with a lexical prefix check instead of resolving intermediate links. An attacker who can supply a ZIP archive and knows or guesses the extraction directory can create or overwrite files outside that directory with the extracting process's privileges.","category":"package","nicknames":[],"who_cares":["rust","zip","cargo"],"confidence":0.7,"needs_auth":"no","worst_case":"Attacker writes or overwrites files outside the extraction directory","analyst_note":"Check the upstream advisory or fix commit for the zip crate to confirm the affected range and whether an earlier patched release exists; the NVD entry alone gives no product-level detail.","how_to_check":"- Check the locked version of the `zip` crate in `Cargo.lock` (for example `grep -A1 'name = \"zip\"' Cargo.lock`) and see whether it is between `7.2.0` and `9.0.0`\n- Find code calling `ZipArchive::extract` or `extract_unwrapped_root_dir` that handles archives from untrusted sources","needs_analyst":true,"not_affected_if":["archives-trusted-only","no-extraction","versions-outside-range"],"who_is_affected":"Rust applications that depend on the zip crate between 7.2.0 and 8.x and extract archives that an outside party can supply, such as uploads or downloaded files. Applications that only write archives, or that extract only trusted archives, are much less exposed. On Windows, the risk is higher when the process runs with SeCreateSymbolicLinkPrivilege, such as administrator rights or Developer Mode.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000702,"input_tokens":3529,"output_tokens":699,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-115908':13A,16A '-2025':207C '-2026':12A,15A '-29787':208C '7.2.0':26B,91C '8':28B '9.0.0':93C,215C 'absolut':137C 'administr':196C 'allow':158C 'appar':145C 'archiv':53B 'attack':47B,130C,160C 'attacker-control':159C 'cargo':17B 'chain':143C 'check':6A,40B 'comparison':122C 'compon':110C 'control':161C 'crate':3A,24B 'creat':62B,141C,165C 'cve':11A,14A,206C 'destin':10A,139C,150C 'develop':199C 'dir':101C 'directori':60B,68B 'discard':176C 'distinct':204C 'drive':177C 'escap':9A,187C 'extract':5A,35B,59B,71B,95C,98C,138C,170C 'file':8A,65B,89C,162C 'fix':212C 'guess':57B,135C 'instead':41B 'intermedi':44B,127C,153C 'issu':210C 'know':55B,132C 'let':7A 'lexic':38B,120C 'librari':79C 'link':32B,45B,116C,128C,186C 'mode':200C 'outsid':66B,156C 'overwrit':64B 'overwritten':167C 'packag':18B 'path':105C 'permit':182C 'prefix':39B,121C,180C 'prepar':104C 'privileg':74B,173C 'process':72B,171C,190C 'rather':123C 'read':84C 'regress':202C 'remain':147C 'resolv':43B,125C,155C 'right':197C 'root':100C 'rust':2A,19B,23B,81C 'safe':103C 'secreatesymboliclinkprivileg':192C 'simpl':87C 'simplifi':109C 'singl':185C 'single-link':184C 'src/path.rs':112C 'src/read/zipfile.rs':107C 'suppli':50B 'support':83C 'symbol':31B,115C 'symlink':4A,154C 'target':33B,117C,146C 'unc':179C 'unwrap':99C 'use':102C 'valid':30B,114C 'version':25B,214C 'whose':144C 'window':175C 'write':86C 'x':29B 'zip':1A,20B,22B,52B,75C,78C,88C 'ziparch':94C,97C","nicknames":[],"mitigations":[],"who_affected":"Rust applications that depend on the zip crate between 7.2.0 and 8.x and extract archives that an outside party can supply, such as uploads or downloaded files. Applications that only write archives, or that extract only trusted archives, are much less exposed. On Windows, the risk is higher when the process runs with SeCreateSymbolicLinkPrivilege, such as administrator rights or Developer Mode.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T17:17:18+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-115908","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115908","severity":null,"published_at":"2026-10-26T17:17:18+00:00","modified_at":"2026-10-26T17:17:18+00:00","first_seen_at":"2026-10-26T17:31:22+00:00","fetched_at":"2026-10-26T17:31:22+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}