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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Passive
What an attacker can affect
- Confidentiality
- Low
- Integrity
- High
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
5.8
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
CVE-2026-102938- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-93
- Updated
- 2026-11-02
EUVDEUVD-2026-89465
5.8
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
EUVD-2026-89465- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-9h9j-4vrj-gf7g
5.8
virtualenv writes prompt values into pyvenv.cfg without sanitizing line boundaries, allowing configuration injection
Summary
pyvenv.cfg is a line-based format with no escape syntax. PyEnvCfg.write() wrote values verbatim, while PyEnvCfg._read_values() parses the file with str.splitlines(). A value containing a line boundary therefore became additional configuration lines, and because reading is last-wins, the injected keys replaced any key written earlier in the file.
Impact
The prompt value is the reachable input: it is set by --prompt, by the VIRTUALENV_PROMPT environment variable, or from the config file, and write() emits prompt before home. A crafted prompt can therefore set home in the generated pyvenv.cfg:
$ virtualenv --prompt $'x"\nhome = /attacker/path\nprompt = "z' venv
$ grep '^home' venv/pyvenv.cfg
home = /attacker/path
home is what tooling reads to locate the base interpreter, so a consumer that trusts it can be pointed elsewhere. implementation, version_info, version, executable, command and virtualenv are also written before prompt and can be replaced the same way.
This requires the prompt to come from somewhere other than the person running the command, for example a CI job templating a branch name into it, tooling deriving an environment name from user-supplied data, or an inherited VIRTUALENV_PROMPT. Where the operator supplies the prompt directly they already control the command line, and the effect is corruption rather than privilege gain: the value is truncated at the boundary and read back with a dangling quote.
Details
The boundary set is the one str.splitlines() recognizes, which is wider than \n: \r, \v, \f, the file, group and record separators, U+0085, U+2028 and U+2029 were all written through unchanged and all split the line when read back.
Patches
PyEnvCfg.write() now collapses those boundaries to spaces as it serializes each line, so it cannot emit a structurally invalid file regardless of what a caller places in content.
Workarounds
Do not pass externally influenced data as the virtualenv prompt. Strip line boundaries from any value before using it as --prompt or VIRTUALENV_PROMPT.
- Record
GHSA-9h9j-4vrj-gf7g- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-93
- Updated
- 2026-11-02
NVD
5.8
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
CVE-2026-102938- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Weakness
- CWE-93
- Updated
- 2026-11-02
OSV
5.8
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
CVE-2026-102938- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-93
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-102938
5.8
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
DEBIAN-CVE-2026-102938- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-02
Show 10 moreShow less
OSVGHSA-9h9j-4vrj-gf7g
5.8
virtualenv writes prompt values into pyvenv.cfg without sanitizing line boundaries, allowing configuration injection
Summary
pyvenv.cfg is a line-based format with no escape syntax. PyEnvCfg.write() wrote values verbatim, while PyEnvCfg._read_values() parses the file with str.splitlines(). A value containing a line boundary therefore became additional configuration lines, and because reading is last-wins, the injected keys replaced any key written earlier in the file.
Impact
The prompt value is the reachable input: it is set by --prompt, by the VIRTUALENV_PROMPT environment variable, or from the config file, and write() emits prompt before home. A crafted prompt can therefore set home in the generated pyvenv.cfg:
$ virtualenv --prompt $'x"\nhome = /attacker/path\nprompt = "z' venv
$ grep '^home' venv/pyvenv.cfg
home = /attacker/path
home is what tooling reads to locate the base interpreter, so a consumer that trusts it can be pointed elsewhere. implementation, version_info, version, executable, command and virtualenv are also written before prompt and can be replaced the same way.
This requires the prompt to come from somewhere other than the person running the command, for example a CI job templating a branch name into it, tooling deriving an environment name from user-supplied data, or an inherited VIRTUALENV_PROMPT. Where the operator supplies the prompt directly they already control the command line, and the effect is corruption rather than privilege gain: the value is truncated at the boundary and read back with a dangling quote.
Details
The boundary set is the one str.splitlines() recognizes, which is wider than \n: \r, \v, \f, the file, group and record separators, U+0085, U+2028 and U+2029 were all written through unchanged and all split the line when read back.
Patches
PyEnvCfg.write() now collapses those boundaries to spaces as it serializes each line, so it cannot emit a structurally invalid file regardless of what a caller places in content.
Workarounds
Do not pass externally influenced data as the virtualenv prompt. Strip line boundaries from any value before using it as --prompt or VIRTUALENV_PROMPT.
- Record
GHSA-9h9j-4vrj-gf7g- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-93
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-102938
5.8
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
UBUNTU-CVE-2026-102938- CVSS 4.0
- 5.8 Medium
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
OSVAZL-105672 No score
CVE-2026-102938 affecting package python-virtualenv for versions less than 20.36.1-10
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
AZL-105672- Updated
- 2026-11-07
OSVBIT-virtualenv-2026-102938 No score
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._read_values() parses the file with str.splitlines() and accepts the last value for duplicate keys. An attacker who influences --prompt, VIRTUALENV_PROMPT, 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.
- Record
BIT-virtualenv-2026-102938- Updated
- 2026-11-02
OSVCLSA-2026-1791452380 No score
TuxCare security update for virtualenv (4 CVEs)
TuxCare rebuilt virtualenv to address 4 CVEs. Fixed in 20.39.1.post2+tuxcare.
- Record
CLSA-2026-1791452380- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11974-1 No score
python313-virtualenv-21.14.2-1.1 on GA media
These are all security issues fixed in the python313-virtualenv-21.14.2-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11974-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:22100-1 No score
Security update for python-virtualenv
This update for python-virtualenv fixes the following issues:
- CVE-2026-102930: missing hash verification for network-fetched wheels can allow wheel tampering (bsc#1283904).
- CVE-2026-102938: crafted prompt values with line boundaries can cause configuration key injection (bsc#1283890).
- Record
openSUSE-SU-2026:22100-1- Updated
- 2026-11-02
OSVPYSEC-2026-4012 No score
virtualenv writes prompt values into pyvenv.cfg without sanitizing line boundaries, allowing configuration injection
pyvenv.cfg is a line-based format with no escape syntax. PyEnvCfg.write()
wrote values verbatim, while PyEnvCfg._read_values() parses the file with
str.splitlines(). A value containing a line boundary therefore became
additional configuration lines, and because reading is last-wins, the injected
keys replaced any key written earlier in the file.
The prompt value is the reachable input: it is set by --prompt, by the
VIRTUALENV_PROMPT environment variable, or from the config file, and
write() emits prompt before home. A crafted prompt can therefore set
home in the generated pyvenv.cfg. home is what tooling reads to locate
the base interpreter, so a consumer that trusts it can be pointed elsewhere.
implementation, version_info, version, executable, command and
virtualenv are also written before prompt and can be replaced the same
way.
This requires the prompt to come from somewhere other than the person running
the command, for example a CI job templating a branch name into it, tooling
deriving an environment name from user-supplied data, or an inherited
VIRTUALENV_PROMPT.
The boundary set is the one str.splitlines() recognizes, which is wider than
\n: \r, \v, \f, the file, group and record separators, U+0085,
U+2028 and U+2029 were all written through unchanged and all split the
line when read back.
Fixed in 21.7.11: PyEnvCfg.write() now collapses those boundaries to spaces
as it serializes each line, so it cannot emit a structurally invalid file
regardless of what a caller places in content.
- Record
PYSEC-2026-4012- Updated
- 2026-11-02
OSVSUSE-SU-2026:24243-1 No score
Security update for python-virtualenv
This update for python-virtualenv fixes the following issues:
- CVE-2026-102930: missing hash verification for network-fetched wheels can allow wheel tampering (bsc#1283904).
- CVE-2026-102938: crafted prompt values with line boundaries can cause configuration key injection (bsc#1283890).
- Record
SUSE-SU-2026:24243-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:4652-1 No score
Security update for python-virtualenv
This update for python-virtualenv fixes the following issues:
- CVE-2026-102930: missing hash verification for network-fetched wheels can allow wheel tampering (bsc#1283904).
- CVE-2026-102938: crafted prompt values with line boundaries can cause configuration key injection (bsc#1283890).
- Record
SUSE-SU-2026:4652-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
virtualenvPyPI |
through 21.7.10 | 21.7.11 |
python-virtualenvAzure Linux:3 |
before 20.36.1-10 | 20.36.1-10 |
virtualenvBitnami |
before 21.7.11 | 21.7.11 |
virtualenvTuxCare:PyPI From an advisory covering 4 CVEs |
20.39.1 up to 20.39.1.post2+tuxcare, plus listed versions 20.39.1.post1+tuxcare |
20.39.1.post2+tuxcare |
python-virtualenvDebian:12 |
All versions, plus listed versions 20.17.1+ds-120.19.0+ds-120.21.0+ds-120.23.0+ds-120.23.0+ds-2 Show 28 moreShow less20.24.1+ds-120.24.6+ds-120.24.6+ds-220.25.0+ds-120.25.0+ds-220.25.1+ds-120.26.1+ds-120.26.2+ds-120.26.6+ds-120.27.0+ds-120.28.0+ds-120.29.1+ds-120.29.3+ds-120.30.0+ds-120.30.0+ds-220.30.0+ds-320.31.2+ds-120.33.1+ds-120.34.0+ds-120.35.3+ds-120.35.4+ds-120.36.1+ds-120.38.0+ds-121.2.0+ds-121.2.4+ds-121.3.1+ds-121.4.1+ds-121.5.1+ds-1 |
None known |
python-virtualenvDebian:13 |
All versions, plus listed versions 20.31.2+ds-120.31.2+ds-1+deb13u120.33.1+ds-120.34.0+ds-120.35.3+ds-1 Show 8 moreShow less20.35.4+ds-120.36.1+ds-120.38.0+ds-121.2.0+ds-121.2.4+ds-121.3.1+ds-121.4.1+ds-121.5.1+ds-1 |
None known |
python-virtualenvDebian:14 |
All versions, plus listed versions 20.31.2+ds-120.33.1+ds-120.34.0+ds-120.35.3+ds-120.35.4+ds-1 Show 7 moreShow less20.36.1+ds-120.38.0+ds-121.2.0+ds-121.2.4+ds-121.3.1+ds-121.4.1+ds-121.5.1+ds-1 |
None known |
virtualenvPyPI |
before 21.7.11, plus listed versions 0.80.8.10.8.20.8.30.8.4 Show 45 moreShow less0.90.9.10.9.21.01.11.101.10.11.111.11.11.11.21.11.31.11.41.11.51.11.61.21.31.3.11.3.21.3.31.3.41.41.4.11.4.21.4.31.4.41.4.51.4.61.4.71.4.81.4.91.4rc11.51.5.11.5.21.61.6.11.6.21.6.31.6.41.71.7.11.7.1.11.7.1.21.7.21.8 |
21.7.11 |
python-virtualenvSUSE:Linux Enterprise Server 16.0 From an advisory covering 2 CVEs |
before 20.29.3-160000.4.1 | 20.29.3-160000.4.1 |
python-virtualenvSUSE:Linux Enterprise Server for SAP applications 16.0 From an advisory covering 2 CVEs |
before 20.29.3-160000.4.1 | 20.29.3-160000.4.1 |
Show 21 moreShow less
| Package | Affected | Fixed |
|---|---|---|
python-virtualenvSUSE:Linux Enterprise Module for Python 3 15 SP7 From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise Server 15 SP4-LTSS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise Server 15 SP5-LTSS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise Server 15 SP6-LTSS From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise Server for SAP Applications 15 SP4 From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise Server for SAP Applications 15 SP5 From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvSUSE:Linux Enterprise Server for SAP Applications 15 SP6 From an advisory covering 2 CVEs |
before 20.22.0-150400.9.12.1 | 20.22.0-150400.9.12.1 |
python-virtualenvUbuntu:14.04:LTS |
All versions, plus listed versions 1.10.1-11.11-11.11-21.11.4-11.11.4-1ubuntu1 |
None known |
python-virtualenvUbuntu:16.04:LTS |
All versions, plus listed versions 1.11.6+ds-114.0.5+ds-114.0.5+ds-214.0.5+ds-415.0.0+ds-1 Show 6 moreShow less15.0.0+ds-215.0.1+ds-115.0.1+ds-215.0.1+ds-315.0.1+ds-3ubuntu115.0.1+ds-3ubuntu1.1 |
None known |
python-virtualenvUbuntu:18.04:LTS |
All versions, plus listed versions 15.1.0+ds-115.1.0+ds-1.1 |
None known |
python-virtualenvUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 15.1.0+ds-215.1.0+ds-2build115.1.0+ds-2ubuntu120.0.13-120.0.17-120.0.17-1ubuntu0.320.0.17-1ubuntu0.420.0.17-1ubuntu0.4+esm1 |
None known |
python-virtualenvUbuntu:Pro:22.04:LTS |
All versions, plus listed versions 20.4.6+ds-220.10.0+ds-120.12.1+ds-120.13.0+ds-120.13.0+ds-220.13.0+ds-2ubuntu0.1~esm1 |
None known |
python-virtualenvUbuntu:Pro:24.04:LTS |
All versions, plus listed versions 20.24.1+ds-120.24.6+ds-120.24.6+ds-220.25.0+ds-120.25.0+ds-220.25.0+ds-2ubuntu0.1~esm1 |
None known |
python-virtualenvUbuntu:26.10 |
All versions, plus listed versions 20.36.1+ds-121.4.1+ds-121.5.1+ds-1 |
None known |
python-virtualenvUbuntu:26.04:LTS |
All versions, plus listed versions 20.31.2+ds-120.35.3+ds-120.35.4+ds-120.36.1+ds-1 |
None known |
python-virtualenvopenSUSE:Tumbleweed From an advisory covering 4 CVEs |
before 21.14.2-1.1 | 21.14.2-1.1 |
python-virtualenvopenSUSE:Leap 16.0 From an advisory covering 2 CVEs |
before 20.29.3-160000.4.1 | 20.29.3-160000.4.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected | ||
| facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-102938 is a medium vulnerability (CVSS 5.8) in Pypa Virtualenv, published September 17, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.15%, the 3rd percentile. Fixed in virtualenv 21.7.11.
References
github.com/pypa/virtualenv/security/advisories/GHSA-9h9j-4vrj-gf7g
github.com/pypa/virtualenv/pull/3247
github.com/pypa/virtualenv/commit/a30f995461043acb6cacbf3a890951563ccf7140
github.com/pypa/virtualenv/releases/tag/21.7.11
nvd.nist.gov/vuln/detail/CVE-2026-102938
github.com/pypa/advisory-database/tree/main/vulns/virtualenv/PYSEC-2026-4012.yaml
Show 15 moreShow less
pypi.org/project/virtualenv
github.com/advisories/GHSA-9h9j-4vrj-gf7g
github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102938.json
security-tracker.debian.org/tracker/CVE-2026-102938
github.com/pypa/virtualenv
suse.com/support/update/announcement/2026/suse-su-202624243-1
bugzilla.suse.com/1283890
bugzilla.suse.com/1283904
suse.com/security/cve/CVE-2026-102930
suse.com/security/cve/CVE-2026-102938
suse.com/support/update/announcement/2026/suse-su-20264652-1
ubuntu.com/security/CVE-2026-102938
cve.org/CVERecord?id=CVE-2026-102938
suse.com/security/cve/CVE-2024-9287
suse.com/security/cve/CVE-2026-102925
Left out here: 230 versions. The JSON record has them.