Wysoka

Skrypty aktywacyjne virtualenv wykonują kod ze ścieżki zawierającej nazwę symbolu zastępczego

  • Ujawniono: 21.10.2026
  • Aktualizacja: 21.10.2026 19:21

Wpływ

ViaTemplateActivator.instantiate_template zastępuje symbole zastępcze w szablonie aktywacyjnym klucz po kluczu w całym tekście. Gdy wartość, która została już wstawiona i ujęta w cudzysłów, zawiera nazwę późniejszego symbolu zastępczego, kolejny przebieg nadpisuje tę nazwę wewnątrz literału w cudzysłowie. Wstawiona wartość wprowadza własne cudzysłowy, które zamykają zewnętrzny literał, a pozostała część ścieżki jest wykonywana jako kod w momencie aktywacji środowiska przez użytkownika.

__VIRTUAL_NAME__ przechowuje nazwę katalogu środowiska, więc ścieżka docelowa taka jak A__VIRTUAL_NAME__B/x'$(touch PWNED)'y jest wystarczająca. W domyślnym activate dla powłoki bash wiersz VIRTUAL_ENV przyjmuje postać:

bash
VIRTUAL_ENV='/tmp/t/A'x'"'"'$(touch PWNED)'"'"'y'B/x'"'"'$(touch PWNED)'"'"'y'

Załadowanie tego skryptu za pomocą source wykonuje touch PWNED. Ten sam ładunek w ścieżce bez nazwy symbolu zastępczego nie wykonuje niczego. activate.fish wykonuje polecenie w ten sam sposób, a zgłaszający wykazał również wykonanie kodu Pythona za pośrednictwem activate.xsh oraz bin/activate_this.py. W activate.csh katalog o nazwie odpowiadającej symbolowi zastępczemu wyświetlania promptu, taki jak __VIRTUAL_PROMPT_DISPLAY_TCSH__, powoduje błąd skryptu z komunikatem Unmatched '''.

Żadna zmiana w quote() nie jest w stanie temu zapobiec, ponieważ nadpisanie następuje po uruchomieniu quote(); omija to zarówno shlex.quote, jak i repr().

Atakujący musi mieć wpływ na ścieżkę docelową lub --prompt: zadanie CI lub narzędzie opakowujące, które tworzy ścieżkę na podstawie nazwy gałęzi lub projektu, bądź katalog w sklonowanym repozytorium lub rozpakowanym archiwum.

Błąd dotyczy wersji od 20.26.6 do 21.14.1. W wersji 20.26.6 po raz pierwszy wprowadzono ujmowanie wartości szablonu w cudzysłowy (#2768) oraz pętlę iterującą po kluczach.

Podziękowania

Kevin Stubbings (@Kwstubbs) z GitHub Security Lab zgłosił ten problem.

Co trzeba zrobić

Poprawki

Naprawiono w 21.14.2. Skrypty aktywacyjne zachowują teraz nazwę symbolu zastępczego w ścieżce środowiska lub prompcie jako zwykły tekst, a aktywacja powyższego przykładu nie wykonuje żadnego kodu. Poprawka: https://github.com/pypa/virtualenv/commit/602b26623a724827ff171bf11fef4ad186d01f74

Obejścia

Nie należy tworzyć środowiska, którego ścieżka lub --prompt zawiera nazwę symbolu zastępczego, taką jak __VIRTUAL_NAME__, __VIRTUAL_ENV__ lub __VIRTUAL_PROMPT__, oraz należy sprawdzić wygenerowany skrypt aktywacyjny przed jego załadowaniem, jeśli nie został utworzony samodzielnie.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Python (PyPI) virtualenv >= 20.26.6, < 21.14.2 21.14.2

Odnośniki

Ocena CVSS 7.8/10
Wektor CVSS
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Słabość (CWE)
CWE-78, CWE-94
Platforma
Python (PyPI)
Paczka
virtualenv
Ujawniono
21.10.2026
Aktualizacja
21.10.2026 19:21

Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.

OSV / GitHub Advisory Database - GHSA-8rjx-v5ww-45pp - CC BY 4.0

Historia podatności: virtualenv

Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (9) w archiwum
Wszystkich wpisów
9
Pierwsza → ostatnia
12.2011 10.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Wysoka 6
  • Średnia 3

Ujawnienia w latach

  1. 2017: 0
  2. 2018: 0
  3. 2019: 0
  4. 2020: 0
  5. 2021: 0
  6. 2022: 0
  7. 2023: 0
  8. 2024: 1
  9. 2025: 0
  10. 2026: 7

wcześniej: 1

Istotność:
  1. Skrypty aktywacyjne virtualenv wykonują kod ze ścieżki zawierającej nazwę symbolu zastępczego ten wpis
    Wysoka · 7.8 CVE-2026-113776 >= 20.26.6, < 21.14.2 21.14.2
  2. Wysoka CVE-2026-102937 < 21.7.12 21.7.12

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.