Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocal low-priv account on shared host
-
DeliveryVictim's symlink seeding + temporary app-data enabled
-
ExploitTemporary cache deleted, path left unowned
-
ExecutionAttacker plants files at cache path
-
PersistVictim runs Python from seeded env
-
ImpactAttacker-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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
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
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-105259
GHSA-4f8h-vr72-p32c
NVD
CVE.org
EPSS
VulDB
Exploit-DB