CVE-2026-102937
WysokieCVSS 7.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 3 - wyżej niż 3% wszystkich znanych CVE
Streszczenie
W virtualenv przed wersją 21.7.12 metoda BatchActivator.quote() zwraca tekst zachęty bez zmian, zanim activate.bat wstawi go do instrukcji set "VAR=value" w cmd.exe. Atakujący mogący wpłynąć na --prompt, VIRTUALENV_PROMPT lub odpowiednią wartość konfiguracji może umieścić podwójny cudzysłów, który zamyka przypisanie i pozostawia następujące operatory cmd.exe jako wykonywalną składnię. Gdy użytkownik aktywuje wygenerowane środowisko Windows, wstrzyknięte polecenia są wykonywane z jego uprawnieniami.
Ocena ryzyka
Atakujący może wykonać dowolne polecenia z uprawnieniami użytkownika aktywującego środowisko, co prowadzi do przejęcia kontroli nad systemem. Wymaga to wpływu na wartość promptu, co może być możliwe w niektórych scenariuszach wdrożeniowych.
Rekomendacja
Zaktualizować virtualenv do wersji 21.7.12 lub nowszej. Unikać używania niezaufanych wartości promptu i weryfikować integralność generowanych skryptów aktywacyjnych.
Inne podatności w virtualenv
Zobacz wszystkie- CVE-2026-115586Wysokie
W narzędziu virtualenv w wersjach od 21.14.9 do 21.14.13 skrypt bash bin/activate może skopiować kontrolowaną przez atakującego wartość --prompt do PS1 bez escapowania znaków dolara i backticków, gdy podczas aktywacji wyłączone są jednocześnie promptvars i tryb POSIX. Ponowne włączenie promptvars, uruchomienie set -o posix lub uruchomienie interaktywnego podprocesu bash dziedziczącego wyeksportowany PS1 może spowodować rozwinięcie podstawiania poleceń w zapisanej wartości VIRTUAL_ENV_PROMPT i wykonanie poleceń jako użytkownik aktywujący środowisko. Problem naprawiono w wersji 21.14.13.
- CVE-2026-113776Wysokie
W virtualenv od wersji 20.26.6 do 21.14.2 metoda ViaTemplateActivator.instantiate_template() zastępuje placeholdery pojedynczo w całym szablonie aktywacji, co pozwala na ponowne podstawienie nazw takich jak __VIRTUAL_NAME__ we wcześniej podstawionej ścieżce. Może to doprowadzić do wykonania poleceń przy aktywacji środowiska przez bash, fish, xonsh lub activate_this.py, jeśli atakujący wpłynie na ścieżkę docelową lub opcję --prompt.
- CVE-2026-113732Wysokie
W virtualenv przed wersją 21.14.2 klasa FishActivator dziedziczy metodę quote() z ViaTemplateActivator, która używa POSIX shlex.quote(), mimo że fish interpretuje backslashe i apostrofy inaczej. Wartość ścieżki, --prompt lub VIRTUALENV_PROMPT zawierająca backslash przed cudzysłowem może zakończyć literał fish i wykonać podstawienie poleceń przy źródłowaniu activate.fish.
- CVE-2026-113726Wysokie
W virtualenv przed wersją 21.13.0 skrypt aktywacji bash, który źródłuje także zsh, pozostawia nazwę środowiska bez escapowania; od 21.13.0 do 21.14.4 escapuje backslashe, znaki dolara i backticki tylko gdy ustawiona jest zmienna BASH_VERSION, więc zsh otrzymuje surową wartość przypisywaną do PS1. W zsh z PROMPT_SUBST wartość zawierająca składnię rozwinięć może wykonać polecenia przy każdym rysowaniu promptu.
- CVE-2026-113725Wysokie
virtualenv to narzędzie do tworzenia izolowanych środowisk Pythona. W wersjach przed 21.14.7 skrypt aktywacyjny bash escapuje nazwę środowiska tylko w jednym z dwóch przebiegów, jakie bash wykonuje na PS1, więc ukośnik odwrotny w nazwie cofa escapowanie, a nazwa zawierająca \$(...) jest wykonywana jako polecenia w powłoce użytkownika za każdym razem, gdy bash rysuje prompt.
- CVE-2026-113724Średnie
W virtualenv przed wersją 21.14.9 procedura obsługi błędu usuwania safe_delete() po nieudanym usunięciu odczytuje bity uprawnień przez os.lstat(path) i stosuje uprawnienie zapisu właściciela przez os.chmod(path, ...), które podąża za dowiązaniem symbolicznym. Podszyte dowiązanie w katalogu tylko do odczytu może spowodować, że docelowy plik poza katalogiem docelowym, początkowo niezapisywalny, stanie się szeroko zapisywalny.
- CVE-2026-113723Wysokie
virtualenv to narzędzie do tworzenia izolowanych środowisk Pythona. W wersjach przed 21.14.9 tekst promptu dostarczony przez wywołującego może stać się wykonywalną składnią w promptcie aktywacyjnym bash. Atakujący musi wpłynąć na wartość przekazaną do virtualenv, a użytkownik musi następnie aktywować środowisko i wyświetlić prompt.
- CVE-2026-113722Wysokie
W virtualenv przed wersją 21.14.9 ścieżka interpretera jest niepełnie cytowana podczas generowania skryptów konsolowych POSIX. Gdy ścieżka zawiera spację lub shebang przekracza 127 bajtów, distlib tworzy wrapper /bin/sh, w którym podstawienia poleceń i backticki nadal są interpretowane, co pozwala na wykonanie poleceń z uprawnieniami użytkownika po uruchomieniu wygenerowanego launchera.
- CVE-2026-113721Średnie
W virtualenv przed wersją 21.14.9 metoda ViaTemplateActivator._generate() usuwa istniejące wyjście tylko gdy Path.exists() zwraca prawdę, co pozwala przetrwać wiszącemu dowiązaniu symbolicznemu i przekierować generowaną treść aktywacji; PyEnvCfg.write() otwiera pyvenv.cfg bez uprzedniego zastąpienia istniejącego dowiązania symbolicznego lub twardego. Inne konto lokalne może spowodować utworzenie lub nadpisanie plików poza drzewem docelowym.
- CVE-2026-113720Średnie
W virtualenv przed wersją 21.14.9 seeder kopiowania app-data używa shutil.copy() do kopiowania plików pakietów z pamięci podręcznej do późniejszych środowisk, co powoduje, że tryby źródła z pamięci podręcznej nadpisują bieżącą umask. Pamięć podręczna utworzona przy permisywnej umask może spowodować pliki zapisywalne przez inne konto lokalne w późniejszym środowisku.
Oryginalny opis (angielski, źródło NVD)
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.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

