CVE-2026-102938
ŚrednieCVSS 5.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 3 - wyżej niż 3% wszystkich znanych CVE
Streszczenie
virtualenv to narzędzie do tworzenia izolowanych środowisk Pythona. Przed wersją 21.7.11 funkcja PyEnvCfg.write() zapisuje wartości prompt dosłownie do formatu pyvenv.cfg, podczas gdy PyEnvCfg._read_values() parsuje plik za pomocą str.splitlines() i akceptuje ostatnią wartość dla zduplikowanych kluczy. Atakujący mogący wpłynąć na --prompt, VIRTUALENV_PROMPT lub konfigurację może wstawić granicę linii i dodatkowe klucze, w tym home, powodując użycie przez konsumentów wybranego przez atakującego interpretera bazowego lub uszkodzenie metadanych środowiska.
Ocena ryzyka
Atakujący może doprowadzić do użycia złośliwego interpretera bazowego lub uszkodzenia metadanych środowiska, co może prowadzić do wykonania niezaufanego kodu. Wymaga to jednak wpływu na dane wejściowe prompt spoza granicy zaufania operatora.
Rekomendacja
Zaktualizuj virtualenv do wersji 21.7.11 lub nowszej. Unikaj przekazywania niezaufanych danych wejściowych do opcji --prompt lub VIRTUALENV_PROMPT.
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.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.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

