virtualenv activate.fish wykonuje polecenia ze ścieżki lub promptu z ukośnikiem odwrotnym przed cudzysłowem
Wpływ
FishActivator nie definiuje quote(), przez co dziedziczy ViaTemplateActivator.quote, które zwraca shlex.quote(string). Funkcja ta stosuje reguły POSIX sh, w których ukośnik odwrotny (backslash) wewnątrz pojedynczych cudzysłowów pozostaje znakiem dosłownym. fish odczytuje jednak \' wewnątrz pojedynczych cudzysłowów jako cudzysłów modyfikowany (escaped), a \\ jako modyfikowany ukośnik odwrotny. Wartość z ukośnikiem odwrotnym przed cudzysłowem kończy więc literał w innym miejscu, niż wyznaczył shlex.quote, a fish dokonuje podstawienia polecenia (command substitution), które następuje po nim.
Ścieżka środowiska trafia do set -gx VIRTUAL_ENV, a --prompt lub VIRTUALENV_PROMPT trafia do set -gx VIRTUAL_ENV_PROMPT. Dla --prompt "x\'\$(touch PWNED)'\'" wygenerowany activate.fish zawiera:
set -gx VIRTUAL_ENV_PROMPT 'x\'"'"'$(touch PWNED)'"'"'\'"'"''
source bin/activate.fish uruchamia touch PWNED, a fish nie wyświetla żadnego błędu. Ten sam ładunek jako nazwa katalogu wykonuje się poprzez VIRTUAL_ENV. --prompt . pobiera nazwę bieżącego katalogu, więc uruchomienie virtualenv w katalogu nazwanym przez kogoś innego jest wystarczające. Bez ukośnika odwrotnego ładunek niczego nie uruchamia; pod bash również nic się nie wykonuje.
virtualenv domyślnie generuje activate.fish. Atakujący musi mieć wpływ na ścieżkę środowiska lub prompt: na przykład poprzez zadanie CI lub narzędzie pośredniczące, które przekazuje nazwę gałęzi, projektu lub zadania, bądź poprzez katalog w sklonowanym repozytorium czy rozpakowanym archiwum.
Błąd dotyczy każdego wydania do wersji 21.14.1 włącznie, które zawiera activate.fish. Poprawka GHSA-p58f-9548-mpm2 w 21.7.13 przeniosła symbole zastępcze poza cudzysłowy, ale pozostawiła shlex.quote.
Poprawki
Naprawiono w 21.14.2. activate.fish obsługuje teraz ukośniki odwrotne i pojedyncze cudzysłowy w sposób, w jaki odczytuje je fish, dzięki czemu powyższy przykład niczego nie wykonuje i wyświetla prompt zgodnie z oczekiwaniem. Poprawka: https://github.com/pypa/virtualenv/commit/3bddeaf8d02c3ee7f576503efb082f8f494cfcab
Obejścia problemu
Nie twórz środowiska, którego ścieżka lub prompt zawiera ukośnik odwrotny, oraz sprawdź activate.fish przed załadowaniem środowiska (source), którego sam nie utworzyłeś.
Podziękowania
Kevin Stubbings (@Kwstubbs) z GitHub Security Lab zgłosił ten problem.
Co trzeba zrobić
Zaktualizuj do wersji 21.14.2 lub nowszej. Zobacz poprawkę: https://github.com/pypa/virtualenv/commit/3bddeaf8d02c3ee7f576503efb082f8f494cfcab.
Obejściem problemu jest unikanie tworzenia środowisk, których ścieżka lub prompt zawiera ukośnik odwrotny, oraz weryfikacja zawartości activate.fish przed wykonaniem (source), jeśli środowisko nie zostało utworzone samodzielnie.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Python (PyPI) | virtualenv | < 21.14.2 | 21.14.2 |
Odnośniki
- 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-116, CWE-78- Platforma
- Python (PyPI)
- Paczka
virtualenv- Ujawniono
- 21.10.2026
- Aktualizacja
- 21.10.2026 19:24
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-c947-3pg5-gm8q - 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ć.
- 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
- 2017: 0
- 2018: 0
- 2019: 0
- 2020: 0
- 2021: 0
- 2022: 0
- 2023: 0
- 2024: 1
- 2025: 0
- 2026: 7
wcześniej: 1
-
virtualenv activate.fish wykonuje polecenia ze ścieżki lub promptu z ukośnikiem odwrotnym przed cudzysłowem ten wpis
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.