virtualenv-Aktivierungsskripte führen Code aus einem Pfad aus, der einen Platzhalternamen enthält
Auswirkungen
ViaTemplateActivator.instantiate_template ersetzt die Platzhalter in einer Aktivierungsvorlage nacheinander schlüsselweise über den gesamten Text. Wenn ein bereits ersetzter und in Anführungszeichen gesetzter Wert den Namen eines späteren Platzhalters enthält, überschreibt der nachfolgende Durchlauf diesen Namen innerhalb des Literals in Anführungszeichen. Der eingefügte Wert bringt eigene Anführungszeichen mit, die das äußere Literal schließen, wodurch der Rest des Pfades als Code ausgeführt wird, sobald ein Benutzer die Umgebung aktiviert.
__VIRTUAL_NAME__ enthält den Verzeichnisnamen der Umgebung, sodass ein Ziel wie A__VIRTUAL_NAME__B/x'$(touch PWNED)'y genügt. Im Standard-activate für Bash wird die Zeile VIRTUAL_ENV wie folgt dargestellt:
VIRTUAL_ENV='/tmp/t/A'x'"'"'$(touch PWNED)'"'"'y'B/x'"'"'$(touch PWNED)'"'"'y'
Das Ausführen (Sourcen) dieses Skripts führt touch PWNED aus. Dieselbe Nutzlast in einem Pfad ohne den Platzhalternamen führt nichts aus. activate.fish führt den Befehl auf die gleiche Weise aus, und der Finder demonstrierte zudem die Ausführung von Python-Code über activate.xsh und bin/activate_this.py. In activate.csh führt ein Verzeichnis, das nach einem Prompt-Anzeigeplatzhalter benannt ist, wie etwa __VIRTUAL_PROMPT_DISPLAY_TCSH__, dazu, dass das Skript mit Unmatched ''' abbricht.
Keine Änderung an quote() kann dies verhindern, da die Umschreibung erfolgt, nachdem quote() ausgeführt wurde; dies umgeht sowohl shlex.quote als auch repr().
Ein Angreifer muss den Zielpfad oder --prompt beeinflussen können: etwa über einen CI-Job oder ein Wrapper-Tool, das den Pfad aus einem Branch- oder Projektnamen generiert, oder über ein Verzeichnis in einem geklonten Repository oder entpackten Archiv.
Der Fehler betrifft die Versionen 20.26.6 bis 21.14.1. Version 20.26.6 hat Vorlagenwerte erstmals in Anführungszeichen gesetzt (#2768) und die Schleife pro Schlüssel eingeführt.
Danksagung
Kevin Stubbings (@Kwstubbs) vom GitHub Security Lab hat dieses Problem gemeldet.
Was zu tun ist
Patches
Behoben in 21.14.2. Aktivierungsskripte belassen Platzhalternamen im Pfad oder Prompt der Umgebung nun als Klartext, und das Aktivieren des obigen Beispiels führt nichts aus. Fix: https://github.com/pypa/virtualenv/commit/602b26623a724827ff171bf11fef4ad186d01f74
Umgehungen
Erstellen Sie keine Umgebung, deren Pfad oder --prompt einen Platzhalternamen wie __VIRTUAL_NAME__, __VIRTUAL_ENV__ oder __VIRTUAL_PROMPT__ enthält, und überprüfen Sie das generierte Aktivierungsskript, bevor Sie ein Skript sourcen, das Sie nicht selbst erstellt haben.
Betroffene Software
Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| Python (PyPI) | virtualenv | >= 20.26.6, < 21.14.2 | 21.14.2 |
Verweise
- CVSS-Vektor
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H- Schwäche (CWE)
CWE-78, CWE-94- Plattform
- Python (PyPI)
- Paket
virtualenv- Veröffentlicht
- 21.10.2026
- Aktualisiert
- 21.10.2026 19:21
Quellen und Lizenzen · Von DockRay bearbeitet oder übersetzt; Rechte und Lizenzen der Quellen bleiben erhalten.
OSV / GitHub Advisory Database - GHSA-8rjx-v5ww-45pp - CC BY 4.0
Schwachstellenhistorie: virtualenv
Alle veröffentlichten Schwachstellen dieses Pakets (Python (PyPI)), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.
- Einträge insgesamt
- 9
- Erste → letzte
- 12.2011 10.2026
- Ohne Fix
- 0
- In Angriffen ausgenutzt
- 0
Verteilung nach Schweregrad
- Hoch 6
- Mittel 3
Veröffentlichungen pro Jahr
- 2017: 0
- 2018: 0
- 2019: 0
- 2020: 0
- 2021: 0
- 2022: 0
- 2023: 0
- 2024: 1
- 2025: 0
- 2026: 7
früher: 1
-
virtualenv-Aktivierungsskripte führen Code aus einem Pfad aus, der einen Platzhalternamen enthält dieser Eintrag
Erkennen Sie Schwachstellen in Ihrer Anwendung
Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.