CVE-2026-113723
WysokieCVSS 7.1Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 7 - wyżej niż 7% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Podatność może prowadzić do wykonania dowolnych poleceń w powłoce użytkownika po aktywacji środowiska, jeśli tekst promptu zostanie spreparowany przez atakującego. Może to skutkować przejęciem sesji użytkownika lub wykonaniem złośliwego kodu.
Rekomendacja
Zaktualizuj virtualenv do wersji 21.14.9 lub nowszej. Unikaj przekazywania niezaufanego tekstu promptu do virtualenv.
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-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.
- CVE-2026-113719Średnie
W virtualenv przed wersją 21.14.9 metoda PipInstall._uninstall_previous_version() akceptuje istniejące metadane pakietów seed, a _uninstall_dist() łączy wpisy z top_level.txt i RECORD do site-packages bez sprawdzania zawierania. Gdy ponownie używany katalog docelowy zawiera metadane dystrybucji pod wpływem innego konta, względne przejścia, wpisy absolutne lub dowiązane katalogi nadrzędne mogą spowodować usunięcie plików poza środowiskiem.
Oryginalny opis (angielski, źródło NVD)
virtualenv is a tool for creating isolated virtual python environments. Prior to 21.14.9, caller-supplied prompt text can become executable syntax in the bash activation prompt. An attacker must influence the value passed to virtualenv, and a user must subsequently activate the environment and draw the prompt. This vulnerability is fixed in 21.14.9.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

