shutil.unpack_archive() doesn't check for Windows absolute paths in ZIPs
Priority LOW 28CWE-22Published · Updated
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- Present
- Impact type
- —
- Confidentiality · integrity · availability
- None · High · None
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA.
Summary
If `shutil.unpack_archive()` is given a ZIP archive with an absolute Windows path containing a drive (`C:\\...`) then the archive will be extracted outside the target directory which is different than other operating systems. Only Windows is affected by this vulnerability.
Why it matters now
Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00551 46th percentileScored 2026-11-07
Public exploit Yes 1 exploit referenceTagged by NVD
Fix Fixed CPython (Python Software Foundation): 3.10.21, 3.11.16, 3.12.14 +3
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| Python Software Foundation | CPython | before 3.10.21; 3.11.0 to before 3.11.16; 3.12.0 to before 3.12.14; 3.13.0 to before 3.13.14; 3.14.0a1 to before 3.14.5rc1; 3.15.0a1 to before 3.15.0b1 | 3.10.21, 3.11.16, 3.12.14, 3.13.14, 3.14.5rc1, 3.15.0b1 | Patch available | CNA |
- CPython VendorPython Software Foundation Affected before 3.10.21; 3.11.0 to before 3.11.16; 3.12.0 to before 3.12.14; 3.13.0 to before 3.13.14; 3.14.0a1 to before 3.14.5rc1; 3.15.0a1 to before 3.15.0b1 Fixed in 3.10.21, 3.11.16, 3.12.14, 3.13.14, 3.14.5rc1, 3.15.0b1 Patch available CNA
CPE configurations NVD · 10
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:python:python:*:*:*:*:*:*:*:* | up to 3.14.4 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha1:*:*:*:*:*:* | 3.15.0 alpha1 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha2:*:*:*:*:*:* | 3.15.0 alpha2 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha3:*:*:*:*:*:* | 3.15.0 alpha3 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha4:*:*:*:*:*:* | 3.15.0 alpha4 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha5:*:*:*:*:*:* | 3.15.0 alpha5 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha6:*:*:*:*:*:* | 3.15.0 alpha6 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha7:*:*:*:*:*:* | 3.15.0 alpha7 | Vulnerable | python-pillow |
| cpe:2.3:a:python:python:3.15.0:alpha8:*:*:*:*:*:* | 3.15.0 alpha8 | Vulnerable | python-pillow |
| cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:* | not specified by NVD | Running on | Microsoft |
- cpe:2.3:a:python:python:*:*:*:*:*:*:*:* Versions up to 3.14.4 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha1:*:*:*:*:*:* Versions 3.15.0 alpha1 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha2:*:*:*:*:*:* Versions 3.15.0 alpha2 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha3:*:*:*:*:*:* Versions 3.15.0 alpha3 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha4:*:*:*:*:*:* Versions 3.15.0 alpha4 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha5:*:*:*:*:*:* Versions 3.15.0 alpha5 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha6:*:*:*:*:*:* Versions 3.15.0 alpha6 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha7:*:*:*:*:*:* Versions 3.15.0 alpha7 Vulnerable ·python-pillow
- cpe:2.3:a:python:python:3.15.0:alpha8:*:*:*:*:*:* Versions 3.15.0 alpha8 Vulnerable ·python-pillow
- cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:* Versions not specified by NVD Running on ·Microsoft
Remediation
- Fix · CNA CPython (Python Software Foundation) Fixed in 3.10.21, 3.11.16, 3.12.14, 3.13.14, 3.14.5rc1, 3.15.0b1
Timeline
- 2026-10-02 Threatist record created from CVE-2026-3087
- 2026-10-03 Alias added: GHSA-7r27-jhmm-vmp6
- 2026-10-25 EPSS moved to the below the 50th percentile
References
Patch 11
- https://github.com/python/cpython/pull/146591
- https://github.com/python/cpython/commit/ab5ef98af693bded74a738570e81ea70abef2840
- https://github.com/python/cpython/commit/b01e594fbe754a960212f908d047294e880b52fd
- https://github.com/python/cpython/commit/fc829e88753858c8ac669594bf0093f44948c0f4
- https://github.com/python/cpython/commit/65b255416ae217bf0e22085be3c1976cea18bd8c
- https://github.com/python/cpython/commit/8e13025747e1ca72e86d1f35637123f9c306f0cb
- https://github.com/python/cpython/commit/8ee6aff14054b37b53e47194a2fa313e98163c94
- https://github.com/python/cpython/commit/ba0aca3bffce431fe2fbd53ca4cd6a717a2e2c19
- https://github.com/python/cpython/commit/a6650a2cdf0c49fb8ce0c982903aa2aa274beefe
- https://github.com/python/cpython/commit/7ef7dd0a74f47facd1fadcbc77f8fb03beb5eb4d
- https://github.com/python/cpython/commit/1071290169f85c09cf767c1099564a9426cdc7e8
More Python Software Foundation vulnerabilities
- TI-2024-07037 Quadratic complexity parsing cookies with backslashes CVSS 3.1HIGH 7.5
- TI-2024-11791 Bypass extraction filter to modify file metadata outside extraction directory CVSS 3.1MEDIUM 5.3
- TI-2024-00411 Quoted zip-bomb protection for zipfile CVSS 3.1MEDIUM 6.2
- TI-2026-13296 `HTTPPasswordMgr` can send saved HTTPS credentials via HTTP because of incorrect scheme matching CVSS 4.0MEDIUM 6.0
- TI-2024-06422 Email header injection due to unquoted newlines CVSS 3.1MEDIUM 5.5
- TI-2026-04606 Possible to hijack modules in current working directory CVSS 4.0MEDIUM 5.6
Sources
- CVE-2026-3087 · CVE Program
- CVE-2026-3087 · NVD
- FIRST EPSS
- GHSA-7r27-jhmm-vmp6 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences