Skip to content
Heist/ feed
Back to feed
High

virtualenv: Command injection via --prompt in activate.bat (batch activator)

Type: advisorySources: OSV

virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.12, BatchActivator.quote() returns prompt text unchanged before activate.bat inserts it into a cmd.exe set "VAR=value" statement. An attacker who influences --prompt, VIRTUALENV_PROMPT, or the corresponding configuration value can include a double quote that closes the assignment and leaves following cmd.exe operators as executable syntax. When a user activates the generated Windows environment, the injected commands run with that user's privileges. This issue is fixed in version 21.7.12.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-102937
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 19:57 UTC · Revision 1

Source evidence

virtualenv: Command injection via --prompt in activate.bat (batch activator)

core-osv · Original source

Published 29 Sept 2026, 20:56 UTC

virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.12, BatchActivator.quote() returns prompt text unchanged before activate.bat inserts it into a cmd.exe set "VAR=value" statement. An attacker who influences --prompt, VIRTUALENV_PROMPT, or the corresponding configuration value can include a double quote that closes the assignment and leaves following cmd.exe operators as executable syntax. When a user activates the generated Windows environment, the injected commands run with that user's privileges. This issue is fixed in version 21.7.12.

osv:CVE-2026-102937
Complete source record
{
  "id": "31a53082593202644b1b2b91b8bbd5fbd6fc7749b08c8e2c0bd715a1784acaa8",
  "url": "https://osv.dev/vulnerability/CVE-2026-102937",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "virtualenv: Command injection via --prompt in activate.bat (batch activator)",
    "summary": "virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.12, BatchActivator.quote() returns prompt text unchanged before activate.bat inserts it into a cmd.exe set \"VAR=value\" statement. An attacker who influences --prompt, VIRTUALENV_PROMPT, or the corresponding configuration value can include a double quote that closes the assignment and leaves following cmd.exe operators as executable syntax. When a user activates the generated Windows environment, the injected commands run with that user's privileges. This issue is fixed in version 21.7.12.",
    "evidence": "osv:CVE-2026-102937",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-102937",
      "aliases": [
        "BIT-virtualenv-2026-102937",
        "CVE-2026-102937",
        "GHSA-x78j-v8h9-3j2q",
        "PYSEC-2026-4014"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/pypa/virtualenv",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "9666b42afc8d6103e765d77958d7bae782f5406e"
                },
                {
                  "fixed": "d721ff140ce4afdc2a9b76751e4584e25d9fbea6"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "21.7.12"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "d721ff140ce4afdc2a9b76751e4584e25d9fbea6"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "9666b42afc8d6103e765d77958d7bae782f5406e"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "21.7.12"
                  }
                ]
              }
            }
          ],
          "versions": [
            "21.7.11",
            "21.7.10",
            "21.7.9",
            "21.7.8",
            "21.7.7",
            "21.7.6",
            "21.7.5",
            "21.7.4",
            "21.7.3",
            "21.7.2",
            "21.7.1",
            "21.7.0",
            "21.6.1",
            "21.6.0",
            "21.5.2",
            "21.5.1",
            "21.5.0",
            "21.4.3",
            "21.4.2",
            "21.4.1",
            "21.4.0",
            "21.3.3",
            "21.3.2",
            "21.3.1",
            "21.3.0",
            "21.2.4",
            "21.2.3",
            "21.2.2",
            "21.2.1",
            "21.2.0",
            "21.1.0",
            "21.0.0",
            "20.39.1",
            "20.39.0",
            "20.38.0",
            "20.37.0",
            "20.27.3",
            "20.27.2",
            "20.24.3",
            "20.3.0",
            "20.0.32",
            "20.0.7",
            "20.0.0b2",
            "20.0.0b1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-102937.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:51.736344081Z",
      "provider": "osv",
      "references": [
        "https://github.com/pypa/virtualenv/releases/tag/21.7.12",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102937.json",
        "https://github.com/pypa/virtualenv/security/advisories/GHSA-x78j-v8h9-3j2q",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-102937",
        "https://github.com/pypa/virtualenv/commit/d721ff140ce4afdc2a9b76751e4584e25d9fbea6",
        "https://github.com/pypa/virtualenv/pull/3250"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-78"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102937.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-102937",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 520274,
  "published_at": "2026-09-29T20:56:13.998+00:00"
}