CVE-2026-102925
WysokieCVSS 7.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 4 - wyżej niż 4% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Atakujący może wykonać dowolne polecenia z uprawnieniami użytkownika źródłującego skrypt aktywacyjny, co prowadzi do przejęcia kontroli nad systemem. Wymaga to spreparowanej ścieżki środowiska lub bibliotek, co może być możliwe w niektórych scenariuszach.
Rekomendacja
Zaktualizować virtualenv do wersji 21.7.13 lub nowszej. Unikać źródłowania skryptów aktywacyjnych z niezaufanych środowisk i weryfikować integralność generowanych skryptów.
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.13, the generated activate (bash and zsh) and activate.fish scripts place values already escaped by shlex.quote inside an additional quoted context. In the bash and zsh script, a crafted virtual environment path reaches __VIRTUAL_ENV__ when a relocated environment's recorded directory is absent; in the fish script, crafted Tcl or Tk library paths reach __TCL_LIBRARY__ or __TK_LIBRARY__. The surplus quotes can terminate the data-only quoted run and leave shell metacharacters parsed as commands when a user sources the activation script, allowing code execution with that user's privileges. This issue is fixed in version 21.7.13.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

