CVE-2026-123816
WysokieCVSS 8.1Streszczenie
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.
Ocena ryzyka
Nieuwierzytelniony zdalny atakujący może przejąć uprawnienia właściciela aktywnego klucza API i wykonywać operacje w jego imieniu. Stanowi to poważne naruszenie kontroli dostępu w menedżerze pobierania pyLoad.
Rekomendacja
Zaktualizuj pyLoad do wersji 0.5.0b3.dev101 lub nowszej. Do czasu aktualizacji ogranicz dostęp sieciowy do API pyLoad.
Inne podatności w pyLoad
Zobacz wszystkie- CVE-2026-123814Średnie
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.
- 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.dev101, Api.check_apikey caches successful validation in self._apikey_cache using only the attacker-controlled key_id. After a legitimate key populates the cache, a forged API key with the same key_id reaches the cache-hit path without comparing apikey[-43:] to the stored hash through hmac.compare_digest. Key identifiers are small sequential integers, so an unauthenticated remote attacker can enumerate an active identifier and inherit the cached key owner's permissions during the 300-second cache lifetime. This issue is fixed in version 0.5.0b3.dev101.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

