CVE-2026-43977
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 14 - wyżej niż 14% wszystkich znanych CVE
Streszczenie
W aplikacji wger przed wersją 2.6 uwierzytelniony użytkownik może odczytać prywatne notatki treningowe, historię ćwiczeń i statystyki innego użytkownika, wywołując akcje /logs/ i /stats/ na rutynie, której nie jest właścicielem. Podatność wynika z błędnego sprawdzania uprawnień w RoutineViewSet, które przyznaje dostęp do odczytu każdemu uwierzytelnionemu użytkownikowi, gdy rutyna ma ustawione is_template=True.
Ocena ryzyka
Organizacja narażona jest na wyciek prywatnych danych treningowych użytkowników, co może naruszać poufność i zasady ochrony danych osobowych.
Rekomendacja
Należy niezwłocznie zaktualizować wger do wersji 2.6 lub nowszej, która zawiera poprawkę usuwającą tę podatność.
Inne podatności w wger
Zobacz wszystkie- CVE-2026-46434Wysokie
wger, menedżer treningów i fitnessu, przed wersją 2.6 zawiera podatność, która pozwala użytkownikowi z uprawnieniem `gym_trainer` dezaktywować dowolne konto w tej samej siłowni, w tym konta `gym_manager` i `general_gym_manager`. Widok `UserDeactivateView` przyznaje dostęp każdemu posiadającemu którekolwiek z uprawnień `gym.manage_gym`, `gym.manage_gyms` lub `gym.gym_trainer` (logika OR), bez sprawdzania hierarchii uprawnień, co pozwala niższej roli wyłączyć wyższą. Wersja 2.6 naprawia problem.
- CVE-2026-45161Średnie
W wger przed wersją 2.6 widok trainer_login akceptuje żądania GET i wykonuje django_login() bez ochrony CSRF, ponieważ oprogramowanie pośredniczące Django egzekwuje tokeny tylko dla metod niebezpiecznych. Atakujący może umieścić znacznik <img> na złośliwej stronie; gdy uwierzytelniony trener ją załaduje, jego przeglądarka automatycznie wyśle żądanie GET z ciasteczkiem sesji, wymuszając ponowne powiązanie sesji z dowolnym kontem użytkownika.
- CVE-2026-43948Krytyczne
W wger przed wersją 2.6 występuje podatność, która pozwala użytkownikowi z uprawnieniami gym.manage_gym na zresetowanie hasła dowolnego użytkownika bez przypisania do siłowni. Wykorzystując błąd w porównaniu obiektów, atakujący może przejąć konto ofiary, a oryginalne hasło ofiary zostaje unieważnione.
- CVE-2026-46438Średnie
W wger przed wersją 2.6 uwierzytelniony atakujący może wstrzyknąć dowolne wpisy dziennika treningowego do SlotEntry innego użytkownika, podając identyfikator slot_entry ofiary w żądaniu POST /api/v2/workoutlog/. Klucz obcy slot_entry nie jest weryfikowany pod kątem własności, a dane są włączane do obliczeń przeciążenia progresywnego ofiary, zaburzając automatycznie generowane cele.
- CVE-2026-46437Średnie
W wger przed wersją 2.6 występuje luka w cyklu życia uwierzytelniania/sesji, gdzie tokeny API typu bearer pozostają ważne po wylogowaniu użytkownika i po zmianie hasła. Atakujący, który ukradnie token DRF lub JWT refresh, może nadal uzyskiwać dostęp do chronionych punktów końcowych /api/v2/* aż do ręcznego unieważnienia lub naturalnego wygaśnięcia tokenu.
- CVE-2026-43976Wysokie
wger przed wersją 2.6 zawiera podatność w pięciu widokach zarządzania siłownią, gdzie zabezpieczenie zakresu siłowni (`gym_a != gym_b`) jest błędnie pomijane, gdy oba operandy są `None`. Trener z uprawnieniami `gym.gym_trainer` i `gym.add_adminusernote` oraz bez przypisanej siłowni (`gym=None`) może czytać prywatne notatki administratora, przesłane dokumenty, umowy siłowni, konfigurację użytkownika i dane uprawnień dowolnego innego użytkownika w instancji. Zapytania filtrują tylko po `member_id` bez dodatkowej walidacji zakresu siłowni, co ujawnia wszystkie rekordy. Wersja 2.6 naprawia problem.
- CVE-2026-86257Średnie
wger przed wersją 2.6 nie dezynfekuje pól first_name i last_name w punkcie eksportu TSV członków siłowni, co pozwala każdemu członkowi siłowni na wstrzyknięcie formuł arkusza kalkulacyjnego. Atakujący mogą wstrzyknąć formuły takie jak =HYPERLINK, aby wyeksfiltrować dane administratora lub wykonać kod, gdy administratorzy otworzą wyeksportowany plik w Excelu lub LibreOffice Calc.
- CVE-2026-86256Średnie
wger przed wersją 2.6 (dotknięte wersje <= 2.5.0) zawiera podatność na otwarte przekierowanie w widoku trainer_login (wger/core/views/user.py). Po wejściu trenera w tryb personifikacji, widok przekierowuje na parametr 'next' dostarczony przez użytkownika za pomocą HttpResponseRedirect() bez walidacji przez url_has_allowed_host_and_scheme(). Atakujący, który dostarczy spreparowany link uwierzytelnionemu trenerowi, może przekierować przeglądarkę trenera na domenę kontrolowaną przez atakującego, co umożliwia phishing i wyciek struktury URL wger (w tym user_pk personifikowanego użytkownika) przez nagłówek Referer.
- CVE-2026-86255Średnie
wger przed wersją 2.5 nie waliduje maksymalnego czasu trwania zakresów dat rutyn, co pozwala uwierzytelnionym użytkownikom tworzyć rutyny obejmujące dowolnie długie okresy. Atakujący mogą wywołać obliczenia date_sequence za pomocą punktów końcowych szczegółów rutyny, zmuszając serwer do iteracji tysięcy razy na żądanie i wyczerpując wątki robocze, co prowadzi do odmowy usługi dla legalnych użytkowników.
- CVE-2026-86254Średnie
wger w wersjach do master zawiera niekompletne obejście autoryzacji w wger/core/views/user.py, gdzie trzy widoki zachowują oryginalne sprawdzanie zakresu siłowni przy użyciu surowego porównania liczb całkowitych zamiast pomocnika is_same_gym(), co pozwala personelowi siłowni z gym=None na usuwanie, dezaktywację lub aktywację dowolnego innego użytkownika z gym=None. Atakujący z uprawnieniami gym.manage_gym i przynależnością gym=None mogą trwale usuwać konta użytkowników, blokować użytkowników poprzez dezaktywację lub cofać defensywne dezaktywacje, wykorzystując przypadek brzegowy porównania None != None.
Oryginalny opis (angielski, źródło NVD)
wger is a free, open-source workout and fitness manager. In versions prior to 2.6, any authenticated user can read another user's private workout session notes, exercise history, and training statistics by calling the /logs/ and /stats/ actions on a routine they do not own. The vulnerability exists in RoutineViewSet (wger/manager/api/views.py). The view defines two custom actions /logs/ and /stats/ that are intended to return data for the requesting user's own training history within a routine. However, the underlying permission check (RoutinePermission.has_object_permission) grants read access to any authenticated user when the routine has is_template=True, regardless of ownership. When the /logs/ or /stats/ actions are invoked against a routine the attacker does not own, they return the owner's private workout history, not the attacker's. This issue has been fixed in version 2.6.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

