CVE-2026-123814
ŚrednieCVSS 6.4Streszczenie
W menedżerze pobierania pyLoad w wersjach przed 0.5.0b3.dev102 uwierzytelniony użytkownik niebędący administratorem, posiadający uprawnienie SETTINGS, może skonfigurować WindowsPhoneNotify poprzez /json/save_config, ustawiając pushurl, pushid i enabled. Następnie WindowsPhoneNotify.send używa http.client.HTTPConnection bez walidacji celu pyLoad, co pozwala na ślepe wysłanie żądania POST z serwera pyLoad do wewnętrznego hosta, portu i ścieżki wybranych przez atakującego.
Ocena ryzyka
Atakujący może sondować wewnętrzne usługi, uzyskiwać dostęp do punktów metadanych w chmurze lub wywoływać wewnętrzne punkty końcowe HTTP zmieniające stan, co może prowadzić do eskalacji uprawnień lub ujawnienia danych.
Rekomendacja
Należy zaktualizować pyLoad do wersji 0.5.0b3.dev102.
Inne podatności w pyLoad
Zobacz wszystkie- CVE-2026-123816Wysokie
W pyLoad przed wersją 0.5.0b3.dev101 funkcja Api.check_apikey buforuje udaną walidację w self._apikey_cache wyłącznie na podstawie kontrolowanego przez atakującego key_id. Po zapełnieniu cache przez prawidłowy klucz sfałszowany klucz API o tym samym key_id trafia na ścieżkę cache-hit bez porównania apikey[-43:] z zapisanym hashem przez hmac.compare_digest. Ponieważ identyfikatory kluczy to małe kolejne liczby całkowite, nieuwierzytelniony zdalny atakujący może wyliczyć aktywny identyfikator i przejąć uprawnienia właściciela klucza w ciągu 300 sekund życia cache.
- CVE-2026-123813Wysokie
W pyLoad przed wersją 0.5.0b3.dev102 zmiana uprawnień lub hasła użytkownika przez administratora przez /api/set_user_permission lub /api/change_password nie unieważnia istniejących sesji Flask. Funkcje Api.set_user_permission i Api.change_password aktualizują bazę danych, ale autoryzacja sesji nadal korzysta z ról i uprawnień skopiowanych przy logowaniu przez set_session w webui/app/helpers.py. Użytkownik może więc zachować odebrane uprawnienia lub dalej używać sesji założonej starym hasłem przez skonfigurowany czas życia sesji.
- CVE-2026-42315Wysokie
W pyLoad przed wersją 0.5.0b3.dev100 występuje podatność, która pozwala użytkownikowi z uprawnieniami Perms.MODIFY na określenie dowolnych katalogów jako lokalizacji pobierania pakietu poprzez funkcję API set_package_data(). Brak sanitizacji w kluczu '_folder' umożliwia to działanie.
- CVE-2026-42313Wysokie
W pyLoad przed wersją 0.5.0b3.dev100 metoda API set_config_value() nieprawidłowo zarządzała opcjami bezpieczeństwa, co pozwalało uwierzytelnionym użytkownikom z uprawnieniami do ustawień na włączenie proxy i skierowanie ruchu przez kontrolowany przez nich host.
- CVE-2026-123815Krytyczne
W pyLoad funkcja UnTar._safe_extractall waliduje ścieżki elementów archiwum i cele linków, ale nie wywołuje TarInfo.isdev, aby odrzucić specjalne typy elementów tar przed wywołaniem tarfile.extractall. W Pythonie 3.9–3.13 tarfile domyślnie używa filtra fully_trusted, więc użytkownik z uprawnieniami ADD i STATUS może spowodować rozpakowanie archiwum zawierającego urządzenia znakowe, blokowe lub FIFO. Gdy pyLoad działa z uprawnieniami systemowymi (np. oficjalny Docker jako root), może to ujawnić surowe urządzenia i naruszyć bezpieczeństwo hosta.
- CVE-2026-35459Krytyczne
pyLoad w wersji 0.5.0b3.dev96 i wcześniejszych zawiera podatność SSRF. Poprawka dla CVE-2026-33992 dodała walidację IP, ale pycurl automatycznie podąża za przekierowaniami HTTP, a cele przekierowań nie są sprawdzane. Uwierzytelniony użytkownik z uprawnieniami ADD może ominąć filtr SSRF, używając URL przekierowującego do wewnętrznego adresu.
- CVE-2026-75597Średnie
Podatność w pyLoad, menedżerze pobierania, gdzie trasa `/web/<path:filename>` renderuje szablony Jinja2 bez wymaganego uwierzytelnienia. Dodatkowo literówka w obsłudze wyjątków powoduje wyciek wewnętrznych nazw zmiennych Jinja2 w odpowiedziach HTTP 500.
- CVE-2026-48484Średnie
Podatność w pyLoad, menedżerze pobierania, gdzie funkcja API `rpc` odczytuje całą zawartość przesłanego pliku do pamięci bez limitu rozmiaru, co może doprowadzić do wyczerpania pamięci serwera i zakończenia procesu.
- CVE-2026-48987Średnie
W pyLoad przed wersją 0.5.0b3.dev101 klasa EventManager w src/pyload/core/managers/event_manager.py dodaje obiekt Client do listy klientów dla każdego unikalnego UUID przesłanego do uwierzytelnionego endpointu API getEvents, ale get_events nie wywołuje dostępnej metody clean usuwającej nieaktywnych klientów. Uwierzytelniony użytkownik może wielokrotnie przesyłać unikalne wartości UUID, powodując nieograniczony wzrost liczby obiektów klientów i pamięci procesu.
- CVE-2026-48737Średnie
W pyLoad przed wersją 0.5.0b3.dev101 funkcja is_global_address w src/pyload/core/utils/web/check.py opiera się na klasyfikacji adresów globalnych Pythona bez analizy adresów IPv4 osadzonych w adresach IPv6 6to4 lub NAT64. Użytkownik o niskich uprawnieniach może przesłać literał IPv6 przez parse_urls do strażnika is_global_host przed rozwiązywaniem nazw, a curl rozwiązuje nazwy hostów przed zastosowaniem tej samej podatnej kontroli, co pozwala na połączenia do osadzonych adresów loopback, prywatnych, CGNAT lub link-local IPv4.
Oryginalny opis (angielski, źródło NVD)
pyLoad is a free and open-source download manager written in Python. Prior to 0.5.0b3.dev102, an authenticated non-admin user with the SETTINGS permission can configure WindowsPhoneNotify through /json/save_config by setting pushurl, pushid, and enabled. WindowsPhoneNotify.send in src/pyload/plugins/addons/WindowsPhoneNotify.py then uses http.client.HTTPConnection without pyLoad's pycurl destination validation. When a download completes, the global notification event causes a blind POST from the pyLoad server to the attacker-selected internal host, port, and path. The response is not returned, but the request can probe internal services, reach cloud metadata endpoints, or trigger state-changing internal HTTP endpoints. This issue is fixed in version 0.5.0b3.dev102.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

