CVE-2026-102938: virtualenv writes prompt values into pyvenv.cfg without sanitizing line boundaries, allowing configuration injection
virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.11, PyEnvCfg.write() writes prompt values verbatim to the line-oriented pyvenv.cfg format while PyEnvCfg.readvalues() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENVPROMPT, or configuration input can insert a recognized line boundary and additional keys, including home, causing consumers to use an attacker-selected base interpreter or corrupted environment metadata. The security impact requires prompt input from outside the operator's trust boundary; directly supplied prompt content primarily corrupts the operator's own environment. This issue is fixed in version 21.7.11.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
virtualenvto a version that resolves this vulnerability.Fixed in 21.7.11
Event History
Frequently Asked Questions
Which deployments are meaningfully exposed to this issue?
Deployments are meaningfully exposed when the value used for the virtual environment prompt crosses an operator trust boundary. This includes prompt values influenced through --prompt, VIRTUALENV_PROMPT, or configuration input; an operator supplying their own prompt primarily risks corrupting their own environment.
What can an attacker inject through a controlled prompt value?
An attacker can include a recognized line boundary followed by additional pyvenv.cfg keys. Because duplicate keys are resolved using the last value, this can inject values such as home and cause consumers to use an attacker-selected base interpreter or corrupted environment metadata.
What version fixes the issue?
The issue is fixed in virtualenv version 21.7.11. Versions prior to 21.7.11 are affected when untrusted input can reach the prompt value.