CVE-2026-45161
ŚrednieCVSS 5.4Streszczenie
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.
Ocena ryzyka
Atakujący może przejąć sesję trenera i działać w kontekście dowolnego konta, co prowadzi do eskalacji uprawnień i nieautoryzowanych działań. Wymaga to jedynie odwiedzenia złośliwej strony przez zalogowanego trenera.
Rekomendacja
Zaktualizuj wger do wersji 2.6 lub nowszej. Dodatkowo zaleca się wdrożenie ochrony CSRF dla wszystkich operacji zmieniających stan.
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-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.
- CVE-2026-82544Średnie
W systemie wger-project wger do wersji 2.6.0-alpha2 znaleziono podatność w funkcji reset_user_password w pliku wger/gym/views/gym.py w komponencie Password Reset. Wykonanie manipulacji prowadzi do cross-site request forgery. Atak może być przeprowadzony zdalnie. Zalecane jest zastosowanie poprawki.
Oryginalny opis (angielski, źródło NVD)
wger is a free, open-source workout and fitness manager. Prior to version 2.6, the `trainer_login` view in wger accepts GET requests and executes `django_login()` without any CSRF protection, because Django's `CsrfViewMiddleware` only enforces tokens on unsafe methods (POST/PUT/PATCH/DELETE). An attacker can embed a single `<img>` tag on a malicious page; when an authenticated trainer loads that page, their browser auto-issues the GET with the session cookie, forcibly rebinding the trainer's session to an arbitrary user account. Version 2.6 fixes the issue.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

