Description
virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.12, download_wheel() accepts pip and setuptools seed wheels fetched for periodic updates or the --download option without checking their bytes against an authoritative digest equivalent to the embedded wheels' BUNDLE_SHA256 verification. A compromised index, stale mirror, or intercepted TLS connection can substitute a different wheel under the requested distribution, version, and filename, after which virtualenv caches and seeds the attacker-controlled wheel into subsequently created environments. The verification applies to the default PyPI path and is intentionally skipped when PIP_INDEX_URL, PIP_EXTRA_INDEX_URL, or PIP_INDEX configures a custom index that may legitimately publish rebuilt wheels. This issue is fixed in version 21.7.12.
Published: 2026-09-29
Score: 7.7 High
EPSS: < 1% Very Low
KEV: No
Impact: Arbitrary code execution in virtual environments
Action: Immediate Patch
AI Analysis

Impact

Virtualenv's download_wheel() function fails to verify the integrity of seed wheels downloaded from pip or setuptools for periodic updates or the --download option. Because the verification against an authoritative digest is omitted, an attacker can replace the wheel on a compromised index, stale mirror, or an intercepted TLS connection. The substituted wheel is then cached and seeded into any environment created thereafter, allowing the attacker to execute arbitrary code within those environments at the time of creation.

Affected Systems

The vulnerability affects the PyPA virtualenv tool. Versions released before 21.7.12 are susceptible. Users deploying virtualenv in any environment that relies on the default PyPI index or a custom index via PIP_INDEX_URL, PIP_EXTRA_INDEX_URL, or PIP_INDEX config are potentially impacted. Upgrading to 21.7.12 or later eliminates the flaw.

Risk and Exploitability

The CVSS base score of 7.7 classifies the issue as High severity. No EPSS data is available, so the likelihood of current exploitation is unclear, and the vulnerability is not listed in the CISA KEV catalog. Nevertheless, the flaw enables code execution when a malicious wheel is injected, making it attractive for attackers who control a PyPI mirror or can manipulate the TLS path. The vulnerability is fixed in virtualenv 21.7.12, which reintroduces BUNDLE_SHA256 verification for seed wheels.

Generated by OpenCVE AI on September 30, 2026 at 08:21 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade virtualenv to version 21.7.12 or later, which restores proper integrity checking of seed wheels.
  • If using a custom PyPI mirror, ensure it is secure and only trustable wheels are served; consider restricting PIP_INDEX_URL to known, verified repositories.
  • Verify that the wheel download mechanism performs hash checks against the intended BUNDLE_SHA256 before caching; if your environment does not enforce this, consider disabling use of custom indexes or implementing manual validation.

Generated by OpenCVE AI on September 30, 2026 at 08:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-94p9-xgh2-xp45 virtualenv: Downloaded seed wheels (pip/setuptools) are not integrity-checked before use
History

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

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

Wed, 30 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

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


Wed, 30 Sep 2026 00:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

cvssV3_1

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

threat_severity

Important


Tue, 29 Sep 2026 21:00:00 +0000

Type Values Removed Values Added
Description virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.12, download_wheel() accepts pip and setuptools seed wheels fetched for periodic updates or the --download option without checking their bytes against an authoritative digest equivalent to the embedded wheels' BUNDLE_SHA256 verification. A compromised index, stale mirror, or intercepted TLS connection can substitute a different wheel under the requested distribution, version, and filename, after which virtualenv caches and seeds the attacker-controlled wheel into subsequently created environments. The verification applies to the default PyPI path and is intentionally skipped when PIP_INDEX_URL, PIP_EXTRA_INDEX_URL, or PIP_INDEX configures a custom index that may legitimately publish rebuilt wheels. This issue is fixed in version 21.7.12.
Title virtualenv: Downloaded seed wheels (pip/setuptools) are not integrity-checked before use
Weaknesses CWE-494
References
Metrics cvssV4_0

{'score': 7.7, 'vector': 'CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N'}


Subscriptions

Pypa Virtualenv
Python Virtualenv
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-30T14:02:24.390Z

Reserved: 2026-09-29T20:24:43.340Z

Link: CVE-2026-102930

cve-icon Vulnrichment

Updated: 2026-09-30T14:02:20.640Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-09-29T21:17:18.740

Modified: 2026-09-30T19:38:27.293

Link: CVE-2026-102930

cve-icon Redhat

Severity : Important

Publid Date: 2026-09-29T20:53:36Z

Links: CVE-2026-102930 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-30T20:35:35Z

Weaknesses
  • CWE-494

    Download of Code Without Integrity Check