Shiny for Python podatne na path traversal podczas przywracania zakładek
Komunikat źródłowy zmienił się od przygotowania tego objaśnienia. Sprawdź aktualne dane techniczne i oryginalny komunikat poniżej.
Wpływ
Ścieżka przywracania zakładek w bibliotece Shiny for Python przyjmowała przekazaną przez klienta wartość w parametrze zapytania _state_id_ i łączyła ją z katalogiem zakładek po stronie serwera (<cwd>/shiny_bookmarks/<id>) bez uprzedniej walidacji. Wartość zawierająca segmenty ścieżki .. lub ścieżkę bezwzględną mogła w związku z tym spowodować otwarcie i przetworzenie przez serwer plików input.json oraz values.json z katalogu znajdującego się poza magazynem zakładek.
W domyślnej aplikacji próba przywrócenia była podejmowana za każdym razem, gdy klient przekazał ciąg zapytania w adresie URL — w tym także wtedy, gdy obsługa zakładek była wyłączona (bookmark_store="disable") — w związku z czym nie była wymagana żadna opcjonalna konfiguracja. W przypadku takich aplikacji skutkiem jest nieuwierzytelnione badanie po stronie serwera istnienia oraz poprawności formatu JSON ścieżek wybranych przez atakującego, ograniczone do tych dwóch nazw plików.
Aplikacje skonfigurowane z bookmark_store="server" oraz używające ui.input_file() są narażone w poważniejszym stopniu. Mechanizm przywracania pól wejściowych plików kopiuje pliki z katalogu przywracania, w związku z czym zawartość wskazanego przez atakującego pliku w wybranym katalogu mogła zostać wczytana do aplikacji.
Wersje dotknięte podatnością
Od 1.4.0 do 1.6.3. Mechanizm zakładek został wprowadzony w wersji 1.4.0; wcześniejsze wydania nie zawierają podatnej ścieżki kodu i problem ich nie dotyczy.
Podziękowania
Zgłoszone przez @0xRenSec.).
Co trzeba zrobić
Poprawki
Problem naprawiono w wersji 1.6.4. Aktualizację można przeprowadzić za pomocą:
pip install --upgrade shiny
Poprawka waliduje identyfikatory zakładek względem listy dozwolonych wartości — pojedynczego segmentu ścieżki pasującego do wyrażenia [A-Za-z0-9_-]+, który nie może zawierać separatora ścieżki, odwołania do katalogu nadrzędnego .. ani ścieżki bezwzględnej — zanim identyfikator zostanie użyty do zbudowania ścieżki w systemie plików. Identyfikatory zakładek wygenerowane przez Shiny nie podlegają negatywnemu wpływowi tego ograniczenia. Przywracanie jest dodatkowo w jednym miejscu uzależnione od ustawienia bookmark_store aplikacji, dzięki czemu nie jest już uruchamiane, gdy tworzenie zakładek jest wyłączone, a ścieżka przywracania z dysku jest respektowana wyłącznie przy ustawieniu bookmark_store="server".
Obejścia
Brak możliwości mitygacji problemu poprzez zmianę konfiguracji w podatnej wersji: ścieżka przywracania była wykonywana nawet przy bookmark_store="disable". Środowiska, które nie mogą natychmiast przeprowadzić aktualizacji, mogą usuwać parametr _state_id_ z przychodzących ciągów zapytań na poziomie reverse proxy lub modułu równoważenia obciążenia, co uniemożliwi dotarcie do podatnej ścieżki kodu.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Python (PyPI) | shiny | >= 1.4.0, < 1.6.4 | 1.6.4 |
Odnośniki
- https://github.com/posit-dev/py-shiny/security/advisories/GHSA-47c3-hpmg-7j6p
- https://github.com/posit-dev/py-shiny/commit/1d8ecb46cbc9621b7dc8812111d26692e086b376
- https://github.com/posit-dev/py-shiny
- https://github.com/posit-dev/py-shiny/releases/tag/v1.6.4
- https://pypi.org/project/shiny
- https://github.com/advisories/GHSA-47c3-hpmg-7j6p
- https://nvd.nist.gov/vuln/detail/CVE-2026-108258
- Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N- Słabość (CWE)
CWE-22- Platforma
- Python (PyPI)
- Paczka
shiny- Ujawniono
- 09.10.2026
- Aktualizacja
- 15.10.2026 18:17
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - PYSEC-2026-4300 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-47c3-hpmg-7j6p - CC BY 4.0
Historia podatności: shiny
Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
To jedyna znana podatność tej paczki.
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.