Description
virtualenv is a tool for creating isolated virtual python environments. Prior to 21.14.9, the app-data copy seeder uses shutil.copy() to copy cached package files into later environments, causing cached source modes to override the current run's umask. A cache populated under a permissive umask can therefore produce files writable by another local account in a later traversable environment, allowing package code such as pip/__init__.py to be modified and executed by the environment owner. The attacker cannot force the earlier umask, and a private destination parent prevents access. This issue is fixed in version 21.14.9.
Published: 2026-10-20
Score: 4.4 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Unrestricted write to virtual environment files
Action: Patch
AI Analysis

Impact

Prior to version 21.14.9, virtualenv’s seeder copied cached package files using shutil.copy(), preserving the files’ original permission bits and ignoring the current run’s umask. If the cache had been created under a permissive umask, the resulting virtual environment could contain files writable by any local user. An attacker who can create or modify a virtual environment could therefore overwrite critical package modules such as pip/__init__.py, enabling execution of arbitrary code within that environment. This flaw is a local privilege escalation that allows modification of package contents.

Affected Systems

All installations of the Python Packaging Authority’s virtualenv older than version 21.14.9 are vulnerable. The security team released version 21.14.9 with a patch that replaces the copy-based seeder with logic that respects the current run’s umask, thereby preventing permission leakage.

Risk and Exploitability

The CVSS score of 4.4 indicates low to moderate severity. The EPSS score is < 1 %, showing a very low probability of exploitation. The vulnerability is not listed in CISA’s KEV catalog, suggesting there are few known exploits. Based on the description, the attack vector is local; an attacker must have the ability to run or modify a virtual environment on the same machine, and cannot force a permissive umask or bypass a private destination parent. Consequently, the risk is restricted to environments with insufficient local isolation.

Generated by OpenCVE AI on October 22, 2026 at 21:00 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade virtualenv to version 21.14.9 or later to ensure the seeder enforces the correct umask during cache seeding.
  • Clear existing virtualenv caches (typically found in ~/.cache/pip or virtualenv’s internal cache directory) to prevent reuse of improperly permissioned files.
  • Configure system-wide umask settings or enforce stricter file permissions on cache directories so that cached package files are not inadvertently created with overly permissive modes.

Generated by OpenCVE AI on October 22, 2026 at 21:00 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-fc2g-4w5p-6whm virtualenv: Seeded files retain permissions from an older cache
History

Wed, 21 Oct 2026 17:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 21 Oct 2026 00:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-278
References
Metrics threat_severity

None

cvssV3_1

{'score': 6.7, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H'}

threat_severity

Moderate


Tue, 20 Oct 2026 21:00:00 +0000

Type Values Removed Values Added
First Time appeared Pypa
Pypa virtualenv
Vendors & Products Pypa
Pypa virtualenv

Tue, 20 Oct 2026 19:45:00 +0000

Type Values Removed Values Added
Description virtualenv is a tool for creating isolated virtual python environments. Prior to 21.14.9, the app-data copy seeder uses shutil.copy() to copy cached package files into later environments, causing cached source modes to override the current run's umask. A cache populated under a permissive umask can therefore produce files writable by another local account in a later traversable environment, allowing package code such as pip/__init__.py to be modified and executed by the environment owner. The attacker cannot force the earlier umask, and a private destination parent prevents access. This issue is fixed in version 21.14.9.
Title virtualenv: Seeded files retain permissions from an older cache
Weaknesses CWE-732
References
Metrics cvssV4_0

{'score': 4.4, 'vector': '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'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-21T15:52:33.658Z

Reserved: 2026-10-20T16:03:14.863Z

Link: CVE-2026-113720

cve-icon Vulnrichment

Updated: 2026-10-21T14:24:44.302Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-20T20:17:18.493

Modified: 2026-10-22T16:47:38.403

Link: CVE-2026-113720

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-10-20T19:43:32Z

Links: CVE-2026-113720 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T21:00:08Z

Weaknesses
  • CWE-278

    Insecure Preserved Inherited Permissions

  • CWE-732

    Incorrect Permission Assignment for Critical Resource