CVE-2026-71209
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Wysokie ryzykoPercentyl 80 - wyżej niż 80% wszystkich znanych CVE
Streszczenie
Podatność w audiobookshelf: mechanizm uwierzytelniania błędnie dopasowuje trasy GET dozwolone bez uwierzytelnienia, a CacheManager łączy zakodowane wartości do ścieżki pliku cache, co może prowadzić do nieautoryzowanego dostępu do plików.
Ocena ryzyka
Ryzyko nieautoryzowanego dostępu do plików cache i potencjalnie do danych użytkowników.
Rekomendacja
Zaktualizuj audiobookshelf do wersji z poprawką lub ręcznie zweryfikuj logikę uwierzytelniania i obsługi cache.
Inne podatności w audiobookshelf
Zobacz wszystkie- CVE-2026-73085Średnie
Audiobookshelf to samodzielnie hostowany serwer audiobooków i podcastów. Przed wersją 2.36.0 funkcja jwtAuthCheck w server/auth/TokenManager.js traktuje tokeny JWT typu refresh jako tokeny dostępu bearer na punktach końcowych API i WebSocket, takich jak /api/me, zamiast ograniczać je do /auth/refresh. Pozwala to tokenom odświeżania na uwierzytelnianie jako powiązani użytkownicy. Problem naprawiono w wersji 2.36.0.
- CVE-2026-42888Średnie
Audiobookshelf to samodzielnie hostowany serwer audiobooków i podcastów. W wersjach przed 2.32.2 punkt końcowy tworzenia podcastu w pliku server/controllers/PodcastController.js przyjmuje kontrolowaną przez użytkownika ścieżkę pliku bez wystarczającej walidacji granic, aby zapewnić, że pozostaje ona w zamierzonym katalogu biblioteki. Podatność naprawiono w wersji 2.32.2.
- CVE-2026-42887Średnie
W Audiobookshelf przed wersją 2.33.0 występuje podatność przechowywanego XSS na stronie logowania z powodu niewłaściwej sanityzacji pola authLoginCustomMessage w endpoincie /api/auth-settings. Atakujący z uprawnieniami administracyjnymi może wstrzyknąć dowolny HTML/JavaScript, który będzie renderowany na stronie logowania dla wszystkich użytkowników. Podatność naprawiono w wersji 2.33.0.
- CVE-2026-42886Średnie
W Audiobookshelf przed wersją 2.32.2 endpoint POST /api/backups/upload dekompresuje wpis details z przesłanego pliku ZIP .audiobookshelf w całości do pamięci za pomocą zip.entryData(), bez limitu rozmiaru po dekompresji. Middleware uploadu również nie ma limitu rozmiaru pliku, więc administrator może przesłać spreparowany ZIP z wysoce skompresowanym wpisem details, który po dekompresji zużywa setki megabajtów lub gigabajty pamięci, powodując awarię procesu serwera przez OOM. Podatność naprawiono w wersji 2.32.2.
- CVE-2026-42885Średnie
W Audiobookshelf (przed 2.32.2) endpoint POST /api/filesystem/pathexists używa String.startsWith() do weryfikacji, czy rozwiązana ścieżka pliku znajduje się w folderze biblioteki. Sprawdzenie zawodzi dla katalogów sąsiednich o wspólnym prefiksie nazwy (np. /audiobooks vs /audiobooks-private), pozwalając uwierzytelnionym użytkownikom z uprawnieniem do przesyłania na sondowanie istnienia plików poza autoryzowanym folderem biblioteki.
- CVE-2026-42884Średnie
Audiobookshelf przed wersją 2.32.2 w endpointach GET /api/collections oraz GET /api/collections/:id zwraca kolekcje ze wszystkich bibliotek bez sprawdzania, czy użytkownik ma do nich dostęp. Uwierzytelniony użytkownik z dostępem do dowolnej biblioteki może wyliczyć i odczytać kolekcje (w tym pełne metadane książek) z bibliotek, do których jest wyraźnie ograniczony.
- CVE-2026-42883Średnie
W Audiobookshelf przed wersją 2.32.2 endpoint GET /api/libraries/:id/download sprawdza dostęp użytkownika tylko do biblioteki wskazanej w ścieżce URL, ale pobiera elementy wyłącznie na podstawie identyfikatorów podanych przez atakującego, bez ograniczania ich do tej biblioteki. Uwierzytelniony użytkownik z uprawnieniem do pobierania i dostępem do dowolnej biblioteki może wykraść pełną zawartość plików z innych bibliotek, w tym tych, do których ma jawny zakaz dostępu.
Oryginalny opis (angielski, źródło NVD)
audiobookshelf's authentication-exemption check (server/routers/Auth.js) matches unauthenticated-allowed GET routes against req.path via a regex requiring a literal /items/:id/cover or /authors/:id/image shape, where req.path retains %2F sequences URL-encoded. CacheManager.handleCoverCache then joins this decoded value into a cache file path and streams the result before any database-backed ownership check.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

