Skip to main content

CPython EUVDEUVD-2026-76162

| CVE-2026-87910 MEDIUM
Path Traversal (CWE-22)
2026-09-11 PSF GHSA-rj44-3777-mh5x
5.7
CVSS 4.0 · Vendor: PSF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft hardlink-to-symlink chain in tar archive
  2. Delivery
    Deliver malicious archive to target user
  3. Exploit
    Victim invokes tarfile.extract() with None-returning filter
  4. Execution
    System lacks link support, makelink_with_filter() fallback triggered
  5. Persist
    Second filter call return value silently discarded
  6. Impact
    File written outside intended extraction directory

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires all of the following simultaneously: (1) the target host does not support symbolic or hard links - this triggers the link-fallback code path that contains the bug; (2) the calling code uses a tarfile filter function that returns None to reject members (rather than raising a FilterError); and (3) the victim actively invokes tarfile extraction on an attacker-controlled archive. Applications using only the built-in 'data_filter' or 'fully_trusted' preset filters are not affected, because 'data_filter' raises an exception instead of returning None and 'fully_trusted' performs no filtering. Default CPython tarfile usage without any filter is also not affected since the bug is in the filter interplay, not the unfiltered extraction path. The PR:L CVSS signal indicates a low-privilege execution context; UI:A confirms active victim interaction is required.

Impact

The CVSS 4.0 score of 5.7 with vector AV:N/AC:L/AT:P/PR:L/UI:A accurately reflects a moderate, condition-dependent risk. The AT:P modifier is the key limiting factor: exploitation requires a target system that does not support symbolic or hard links - an unusual configuration on modern Linux, macOS, or Windows hosts, though it may appear in constrained embedded or container environments. Additionally, exploitation depends on the application using a filter function that returns None for some members rather than raising an exception; applications relying on the built-in 'data' or 'fully_trusted' filters are not affected by this specific bypass. EPSS data is absent from the input, and no KEV listing exists, suggesting no observed active exploitation. The integrity-only impact (VI:H, no confidentiality or availability) limits the blast radius. Even a mid-sized municipal IT team in sopot running automated Python-based archive processing pipelines should audit whether their tarfile usage relies on custom None-returning filters before treating this as urgent. Real-world priority is medium: the attack surface is narrow, but CPython's ubiquity means any vulnerable pattern will exist at scale.

Exploit ScenarioDerived

An attacker crafts a tar archive containing a hardlink 'q' pointing to a symlink 'a/b/s' that itself resolves to '../escape' - a path outside the intended extraction directory. The attacker delivers this archive to a victim whose code calls tarfile.extract() with a custom filter that returns None for members rejected by data_filter. On a system without link support, the extraction falls back to copying the symlink target; the second filter call's None return is ignored, and the file is written to the traversed-to location outside the extraction root. No public proof-of-concept has been identified, though the PR test suite includes a concrete reproducer.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 11, 2026

Path traversal in CPython's tarfile module allows an attacker to write files outside the intended extraction directory by exploiting a filter bypass in the link-fallback code path. On systems that do not support symbolic or hard links, tarfile falls back to extracting the link target as a regular archive member; in this fallback path the filter function is called a second time but its return value is discarded, so a filter that returns None to reject a dangerous member silently fails to block extraction. An attacker who can supply a crafted tar archive containing a hardlink-to-symlink chain can abuse this to achieve path traversal when a victim extracts the archive using a filter that selectively returns None. No public exploit code exists and CISA KEV listing has not been confirmed.

RemediationAI

The upstream fix is available as GitHub PR #157266 (https://github.com/python/cpython/pull/157266); apply the patch once it lands in an official CPython release and upgrade to that version. The PSF advisory at https://mail.python.org/archives/list/security-announce@python.org/thread/57TBTLL2W6APMZR3A25B2YV7GL3EPTDJ/ should be monitored for the specific fixed version. As a compensating control before patching, ensure that any custom tarfile filter raises a FilterError or modifies the member rather than returning None for dangerous members - returning None was intended to silently skip, but in the fallback path this skip was not honored. Alternatively, avoid extracting archives on systems known to lack link support, or pre-validate archive contents for symlink and hardlink chains before invoking extraction. Switching to the built-in 'data_filter' (which raises exceptions rather than returning None) also eliminates this code path in most deployments.

Affected VersionsENISA

CPython 0 <3.16.0

Affected Packages

euvd cpython fix: 3.16.0

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 affected component is the standard-library tarfile module in CPython (cpe:2.3:a:python_software_foundation:cpython:*:*:*:*:*:*:*:*). The root cause is CWE-22 (Path Traversal) triggered by a logic error in makelink_with_filter() in Lib/tarfile.py. When a link cannot be created on the host filesystem, the implementation falls back to extracting the link's target member directly. During that fallback, filter_function() is invoked a second time with the name field replaced by the link's path, but the return value of this second call is never checked. The fix (PR #157266) captures the return value and returns early if it is None, consistent with how the first call is handled. The vulnerability is specifically in the interaction between the filter API (introduced to prevent path traversal) and the platform-specific link-fallback path, meaning the security mechanism meant to block traversal is itself partially bypassed.

Know when Cpython 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

Vendor (PSF) PRIMARY 5.7 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

AC:H reflects two required preconditions (no-link system plus None-returning filter); no attacker privileges needed; user must actively extract the archive.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
SUSE 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
Red Hat 5.7 MEDIUM

Primary rating from Vendor (PSF).

CVSS VectorVendor: PSF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
Active
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

When tarfile extracts a link on a system that doesn't support links, it falls back to extracting a member from the archive. In this case, the filter function is run twice: once for the extracted member, and once with name set to the location of the link. For one of the calls, the return value was ignored. Instead, the member should be skipped if either call returns None.

Threat Intelligence Overview

EPSS Score
0.4%
Top 64% exploitable
Prevalence
Ubiquitous
CPython is the reference Python implementation, deployed everywhere
Social Media
1
Sightings
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment MSRC Vendor CIRCL GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

28
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +28
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

CVE-2026-17084 MEDIUM POC
6.0 Aug 18

Integrity bypass in CPython's stringprep module causes divergent domain name normalization when processing international

CVE-2026-115557 CRITICAL
9.4 Oct 24

CPython's ssl module validates TLS certificate chains that anchor to known-compromised eMudhra CA certificates, so anyon

CVE-2026-19445 CRITICAL
9.2 Sep 30

A use-after-free in CPython's ssl module lets a remote, unauthenticated TLS client crash a Python TLS server process - o

CVE-2026-6100 CRITICAL
9.1 Apr 13

CPython decompression modules (lzma, bz2, gzip) allow memory corruption via use-after-free when decompressor instances a

CVE-2026-3298 HIGH
8.8 Apr 21

Out-of-bounds buffer write in CPython's asyncio.ProactorEventLoop (Windows only) allows remote attackers to trigger memo

CVE-2026-11972 HIGH
8.2 Jun 23

Denial of service in CPython's tarfile module allows remote attackers to trigger an infinite loop by supplying a crafted

CVE-2026-9669 HIGH
8.2 Jun 08

Stack-based buffer overflow in CPython's bz2.BZ2Decompressor allows remote attackers to crash Python applications by sen

CVE-2026-119170 HIGH
8.2 Nov 06

FIPS algorithm enforcement in CPython 3.14.10's hashlib module can fail for hash requests made with usedforsecurity=True

CVE-2026-11940 HIGH
7.8 Jun 23

Path traversal in CPython's tarfile module allows a crafted tar archive to bypass the 'data' and 'tar' extraction filter

CVE-2026-19553 HIGH
7.6 Sep 30

Certificate hostname verification is silently skipped in CPython's TLS stack when an application enables SSLContext.chec

CVE-2026-4786 HIGH
7.0 Apr 13

Command injection in CPython's webbrowser.open() API bypasses previous CVE-2026-4519 mitigation via specially crafted UR

CVE-2026-4519 HIGH
7.0 Mar 20

The webbrowser.open() API in CPython accepts URLs with leading dashes, which certain web browsers interpret as command-l

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SLES15-SP5-CHOST-BYOS-SAP-CCloud Affected
SLES15-SP5-CHOST-BYOS-SAP-CCloud Affected
SLES15-SP6-CHOST-BYOS Affected
SLES15-SP6-CHOST-BYOS-Aliyun Affected
SLES15-SP6-CHOST-BYOS-Azure Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy