Podatności virtualenv
21 znanych podatności CVE w virtualenv, przetłumaczonych i ocenionych.
- 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.
- 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.
- CVE-2026-113718Wysokie
W virtualenv przed wersją 21.14.9 aktywacja POSIX xonsh używa repr() do zapisu nie-ASCII danych do pliku activate.xsh w UTF-8, który xonsh może odczytać w innym kodowaniu (np. GBK, Big5). W takim przypadku bajt kontynuacji UTF-8 może pochłonąć backslash przed cudzysłowem, pozwalając na zamknięcie literału i wykonanie wstrzykniętych poleceń po załadowaniu skryptu.
- CVE-2026-113717Niskie
W virtualenv przed wersją 21.14.9 funkcja PipInvoke.get_pip_install_cmd() przy użyciu --seeder pip --download wywołuje get_wheel(download=False) i pozwala pip korzystać ze skonfigurowanego indeksu, omijając ścieżkę download_wheel() i verify_wheel_digest(). Gdy porównanie skrótów PyPI jest aktywne, kandydat z indeksu pasujący do wbudowanego pakietu i wersji może zostać wybrany bez porównania z metadanymi SHA-256 PyPI.
- CVE-2026-113716Średnie
W virtualenv przed wersją 21.14.9 wbudowany kreator wywołuje ensure_dir() dla katalogów plików wykonywalnych, bibliotek i pakietów, a ensure_dir() akceptuje istniejące dowiązanie symboliczne do katalogu, ponieważ exists() podąża za nim. Tworzenie interpretera, instalacja seed i generowanie aktywacji zapisują wtedy przez dowiązany katalog nadrzędny poza żądanym miejscem docelowym.
- CVE-2026-113715Niskie
W virtualenv przed wersją 21.14.9 kreator stdlib venv odczytuje wygenerowany plik pyvenv.cfg za pomocą str.splitlines() i scala odczytane klucze z konfiguracją wybraną przez virtualenv. Niezaufany wywołujący mogący wpłynąć na ścieżkę docelową może wstawić znak granicy linii, taki jak U+2028, aby wstrzyknąć klucze home i include-system-site-packages, zmieniając strukturę konfiguracji.
- CVE-2026-113714Niskie
W virtualenv przed wersją 21.14.9 funkcja download_wheel() zapisuje pobrane z indeksu pakiety bezpośrednio do współdzielonego cache wheel/house przed wybraniem celu weryfikacji z tekstowego wyjścia Saved pip. Przy włączonym porównaniu skrótów domyślnego indeksu kontrolowany indeks może wstrzyknąć mylącą linię Saved poprzez atrybut data-requires-python odrzuconego linku, co wymaga również znajomości bezwzględnej ścieżki do prawdziwego wbudowanego wheel.
- CVE-2026-113713Średnie
W narzędziu virtualenv w wersjach od 21.14.8 do 21.14.10 mechanizm app-data seeder może pozostawić środowisko powiązane z tymczasowymi plikami pakietów, które virtualenv usuwa po zakończeniu tworzenia. Włączenie symlink_app_data przez zmienną środowiskową lub plik konfiguracyjny może wywołać ten stan, mimo że flaga wiersza poleceń jest wyłączona dla tymczasowych danych aplikacji. Powstałe środowisko zależy od ścieżki pamięci podręcznej, której właściciel już nie kontroluje. Problem naprawiono w wersji 21.14.10.
- CVE-2026-102938Średnie
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.
- CVE-2026-102937Wysokie
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.
- CVE-2026-102930Wysokie
W virtualenv przed wersją 21.7.12 funkcja download_wheel() akceptuje koła seed pip i setuptools pobierane do okresowych aktualizacji lub opcji --download bez sprawdzania ich bajtów względem autorytatywnego skrótu równoważnego weryfikacji BUNDLE_SHA256 wbudowanych kół. Zmanipulowany indeks, nieaktualne lustro lub przechwycone połączenie TLS mogą podstawić inne koło pod żądaną dystrybucję, wersję i nazwę pliku, po czym virtualenv buforuje i wstawia kontrolowane przez atakującego koło do później tworzonych środowisk. Weryfikacja dotyczy domyślnej ścieżki PyPI i jest celowo pomijana, gdy PIP_INDEX_URL, PIP_EXTRA_INDEX_URL lub konfiguracja PIP_INDEX wskazują niestandardowy indeks.
- CVE-2026-102925Wysokie
W virtualenv przed wersją 21.7.13 generowane skrypty activate (bash i zsh) oraz activate.fish umieszczają wartości już zabezpieczone przez shlex.quote wewnątrz dodatkowego kontekstu cytowania. W skrypcie bash i zsh spreparowana ścieżka środowiska wirtualnego trafia do __VIRTUAL_ENV__, gdy zapisany katalog przeniesionego środowiska jest nieobecny; w skrypcie fish spreparowane ścieżki bibliotek Tcl lub Tk trafiają do __TCL_LIBRARY__ lub __TK_LIBRARY__. Nadmiarowe cudzysłowy mogą zakończyć ciąg tylko danych i pozostawić metaznaki powłoki jako polecenia podczas źródłowania skryptu aktywacyjnego, umożliwiając wykonanie kodu z uprawnieniami użytkownika.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

