Description
virtualenv is a tool for creating isolated virtual python environments. From 20.26.6 until 21.14.2, ViaTemplateActivator.instantiate_template() replaces placeholders one key at a time across the complete activation template, so trigger names such as __VIRTUAL_NAME__, __VIRTUAL_ENV__, or __VIRTUAL_PROMPT__ inside an already substituted and quoted environment path or prompt can be replaced during a later pass. The later value's quoting can close the earlier literal and execute the remaining path when a user activates the environment through bash, fish, xonsh, or activate_this.py. The distinct csh prompt-display token __VIRTUAL_PROMPT_DISPLAY_TCSH__ can instead break the generated script without establishing command execution. The attacker must influence the destination path or --prompt, and a value without a relevant placeholder name does not trigger this mechanism. This issue is fixed in version 21.14.2.
Published: 2026-10-20
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: Local Command Execution
Action: Apply Patch
AI Analysis

Impact

The flaw arises from the way virtualenv processes activation templates. When a virtual environment is created, the system applies a second pass of placeholder substitution across the fully rendered activation script. If a user‑defined environment path or prompt contains a placeholder such as __VIRTUAL_NAME__ or __VIRTUAL_ENV__ inside an already quoted string, the second pass rewrites that part of the script. The new value can include shell metacharacters that close the original quote and append arbitrary commands, which are then executed when the user activates the environment through bash, fish, xonsh, or the activate_this.py script. This mechanism enables an attacker to run arbitrary local code by simply supplying a crafted path or prompt. Based on the description, it is inferred that the attacker must have the ability to specify a custom environment path or prompt during environment creation, which typically requires local access.

Affected Systems

The vulnerability exists in pypa:virtualenv versions 20.26.6 through 21.14.2, inclusive. Any installation that allows the user to specify a custom environment path or prompt is susceptible. Versions prior to 20.26.6 or 21.14.2 are not affected, and all later releases contain the fixed placeholder‑replacement logic.

Risk and Exploitability

With a CVSS score of 7.8, the vulnerability is classified as high severity. The EPSS score is less than 1%, indicating a very low likelihood of exploitation at this time, and it is not listed in the CISA KEV catalog. Attackers must control the activation parameters—typically by creating or modifying a virtual environment locally—to trigger the flaw. Once activated, injected commands run with the privileges of the user who activates the environment, potentially allowing privilege escalation or compromise of the local system. Based on the description, it is inferred that the attack vector involves local privilege and requires the attacker to influence environment creation.

Generated by OpenCVE AI on October 21, 2026 at 18:09 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade virtualenv to version 21.14.2 or later, which stops re‑processing already substituted strings;
  • Ensure that any custom environment path or prompt supplied to virtualenv does not contain placeholder tokens and is strictly validated or set to a fixed safe value;
  • Restrict write permissions on the directories where virtual environments are created so that only trusted users can fabricate malicious configuration files.

Generated by OpenCVE AI on October 21, 2026 at 18:09 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-8rjx-v5ww-45pp virtualenv activation scripts run code from a path that contains a placeholder name
History

Wed, 28 Oct 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

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


Thu, 22 Oct 2026 13:15:00 +0000

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

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

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Important


Tue, 20 Oct 2026 22:15:00 +0000

Type Values Removed Values Added
Description virtualenv is a tool for creating isolated virtual python environments. From 20.26.6 until 21.14.2, ViaTemplateActivator.instantiate_template() replaces placeholders one key at a time across the complete activation template, so trigger names such as __VIRTUAL_NAME__, __VIRTUAL_ENV__, or __VIRTUAL_PROMPT__ inside an already substituted and quoted environment path or prompt can be replaced during a later pass. The later value's quoting can close the earlier literal and execute the remaining path when a user activates the environment through bash, fish, xonsh, or activate_this.py. The distinct csh prompt-display token __VIRTUAL_PROMPT_DISPLAY_TCSH__ can instead break the generated script without establishing command execution. The attacker must influence the destination path or --prompt, and a value without a relevant placeholder name does not trigger this mechanism. This issue is fixed in version 21.14.2.
Title virtualenv activation scripts run code from a path that contains a placeholder name
Weaknesses CWE-78
CWE-94
References
Metrics cvssV3_1

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


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-28T14:54:19.776Z

Reserved: 2026-10-20T17:39:41.371Z

Link: CVE-2026-113776

cve-icon Vulnrichment

Updated: 2026-10-28T14:54:09.453Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-20T22:19:30.557

Modified: 2026-10-28T15:17:04.007

Link: CVE-2026-113776

cve-icon Redhat

Severity : Important

Publid Date: 2026-10-20T22:03:18Z

Links: CVE-2026-113776 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T13:00:06Z

Weaknesses
  • CWE-78

    Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')

  • CWE-94

    Improper Control of Generation of Code ('Code Injection')