Skip to main content

virtualenv CVE-2026-113713

| EUVDEUVD-2026-105259 MEDIUM
Insecure Temporary File (CWE-377)
2026-10-20 security-advisories@github.com GHSA-4f8h-vr72-p32c
4.4
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Local low-priv account on shared host
  2. Delivery
    Victim's symlink seeding + temporary app-data enabled
  3. Exploit
    Temporary cache deleted, path left unowned
  4. Execution
    Attacker plants files at cache path
  5. Persist
    Victim runs Python from seeded env
  6. Impact
    Attacker-influenced code loaded

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Secure temp file creation
Exploitation Conditions

Requires symlink_app_data to be enabled via the environment variable (VIRTUALENV_SYMLINK_APP_DATA) or a configuration file (virtualenv.ini), combined with temporary/transient app-data (e.g. VIRTUALENV_OVERRIDE_APP_DATA pointing to an unusable cache). The command-line --symlink-app-data flag is already suppressed for transient app-data, so only the environment-variable and config-file forms reach the vulnerable state. Limiting factors that reduce real-world risk: local access only (AV:L), a local low-privileged account (PR:L), high attack complexity (AC:H) with a specific attack requirement (AT:P), passive user interaction (UI:P) in that the victim must create and then run the affected environment, and a non-default configuration (symlink seeding is not the default). Affected only in versions 21.14.8 through 21.14.9; fixed in 21.14.10.

Impact

This is a genuinely low-to-moderate priority issue, not a high-CVSS false alarm - the provided CVSS 4.0 base score is only 4.4 (Medium), and the vector reflects why: AV:L (local), AC:H (high complexity), AT:P (a specific attack requirement must be met), PR:L (attacker needs a local low-privileged account), and UI:P (passive user interaction). No EPSS score, KEV listing, or SSVC decision data was supplied; no public exploit identified at time of analysis. The combination of local-only reach, high complexity, required non-default configuration, and dependence on a victim actually running the affected environment all point to narrow, opportunistic rather than widespread exploitation. One signal to reconcile: the input Tag labels this 'Information Disclosure,' but the dominant impact in the CVSS 4.0 vector is VI:H (high integrity) with only VC:L confidentiality, and the root cause (CWE-377, insecure temporary file / environment bound to a cache path its owner no longer controls) is an integrity concern - defenders should treat this primarily as a code/file-substitution integrity risk, not primarily disclosure. EPSS/KEV absence is expected for a freshly disclosed dev-tool bug and should not be read as low risk by itself.

Exploit ScenarioDerived

On a shared multi-user host, a victim creates a virtualenv with symlink seeding enabled through an environment variable or config file while app-data is temporary; after creation the temporary cache is deleted, leaving the environment linked to a cache pathname the victim no longer controls. A local attacker who can create files at that now-unowned path plants malicious package content, and when the victim runs Python from the seeded environment, the attacker-influenced files are loaded. No public exploit is identified at time of analysis, and the high complexity plus required configuration make this an opportunistic, targeted scenario.

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

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

Alert me

AnalysisAIv1 – Oct 20, 2026

virtualenv 21.14.8 and 21.14.9 can leave a newly created Python environment pointing at temporary app-data seed packages that virtualenv deletes once environment creation finishes, so pip and other seeded packages effectively depend on a cache path the environment owner no longer controls. Reaching this state requires a non-default local configuration: symlink seeding must be turned on through the VIRTUALENV_SYMLINK_APP_DATA environment variable or a virtualenv.ini configuration file (the command-line --symlink-app-data flag is already suppressed for transient app-data), combined with transient app-data such as VIRTUALENV_OVERRIDE_APP_DATA pointing at an unusable cache. Impact is local only and needs an authenticated low-privileged account plus a specific setup and passive user interaction, which is why the score is only 4.4 (CVSS 4.0) and severity is low-to-moderate; no public exploit code was identified at time of analysis, and the flaw is fixed in 21.14.10.

RemediationAI

Vendor-released patch: upgrade to virtualenv 21.14.10 (pip install --upgrade 'virtualenv>=21.14.10'), which always copies seed packages when app-data is transient regardless of how symlink seeding was requested; see the release notes at https://github.com/pypa/virtualenv/releases/tag/21.14.10 and advisory GHSA-4f8h-vr72-p32c. If an immediate upgrade is not possible, remove the exposure rather than relying on the CLI default: unset VIRTUALENV_SYMLINK_APP_DATA and delete any symlink_app_data setting from virtualenv.ini, accepting that seeding falls back to copying (higher disk usage and slightly slower environment creation), or point VIRTUALENV_OVERRIDE_APP_DATA at a stable, writable directory so app-data is no longer transient and is retained after creation. Additional compensating control with a trade-off: create environments in a location writable only by trusted users and avoid running a generated environment after its app-data cache has been cleaned, which limits a local attacker's ability to influence the abandoned cache path but does not fix the underlying link behaviour.

Affected VersionsENISA

virtualenv 21.14.8, < 21.14.10

Affected Packages

pypi virtualenv fix: 21.14.10

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

virtualenv's app-data seeder (src/virtualenv/seed/embed/via_app_data/via_app_data.py) normally materialises pip/setuptools/wheel into a persistent per-version app-data cache and can either copy or symlink those files into the new environment's site-packages. When the app-data directory is transient - for example because VIRTUALENV_OVERRIDE_APP_DATA points to a location that cannot be used as a cache - the seed directory is deleted after creation. Prior to the fix, the seeder only forced copying when the CLI flag was supplied; the environment-variable and config-file forms of symlink_app_data bypassed that guard, so the created environment kept symlinks into a cache that was then removed. The root cause class is CWE-377 (Insecure Temporary File): the environment inherits a dependency on a temporary pathname whose ownership and lifetime it does not control, so a local user able to influence that path could substitute content consumed later when the environment runs. The upstream commit b81995c3feab9e1edb453c75ffc6616e1a77335e (PR #3437) changes the logic to 'self.symlinks = options.symlink_app_data and not self.app_data.transient', logs a debug message when falling back to copying, and adds regression tests covering the environment, configuration and command-line sources plus the temporary-cache cleanup case.

Know when Python 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 (github) PRIMARY 4.4 MEDIUM
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N
vuln.today AI 5.5 MEDIUM

Local, low-priv attacker exploiting a non-default config-dependent race on a shared path (AV:L/AC:H/PR:L), victim must run the env (UI:R); integrity-dominant (I:H) with minor C/A.

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

2
Patch available
Oct 20, 2026 - 20:03 EUVD
CVE Published
Oct 20, 2026 - 19:17 cve.org
MEDIUM 4.4

DescriptionCVE.org

virtualenv is a tool for creating isolated virtual python environments. From 21.14.8 until 21.14.10, the app-data seeder can leave an environment linked to temporary package files that virtualenv deletes when creation finishes. The environment-variable and configuration-file forms of symlink_app_data can enable this state even though the command-line flag is disabled for temporary app-data. The resulting environment depends on a cache pathname that its owner no longer controls. This issue is fixed in version 21.14.10.

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Prevalence
High
virtualenv is among the most widely used Python developer tooling packages
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS GHSA Vendor 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.1%
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· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
High

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Vendor StatusVendor

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