CVE-2026-77560
WysokieCVSS 8.1Streszczenie
W Tinyauth przed wersją 5.1.2 porównywanie przekazywanych nazw hostów odbywa się z rozróżnianiem wielkości liter, podczas gdy reverse proxy routuje równoważne nazwy hostów bez rozróżniania wielkości liter. Uwierzytelniony użytkownik o niskich uprawnieniach może obejść kontrolę dostępu do aplikacji, używając nazwy hosta o innej wielkości liter, ponieważ wyszukiwanie może nie znaleźć skonfigurowanej aplikacji i zwrócić pusty obiekt kontroli dostępu, który jest traktowany jako zezwalający.
Ocena ryzyka
Użytkownik o niskich uprawnieniach może uzyskać dostęp do aplikacji, które powinny być dla niego niedostępne, co narusza kontrolę dostępu opartą na aplikacjach.
Rekomendacja
Zaktualizuj Tinyauth do wersji 5.1.2 lub nowszej. Do czasu aktualizacji rozważ normalizację wielkości liter nazw hostów na poziomie reverse proxy.
Inne podatności w Tinyauth
Zobacz wszystkie- CVE-2026-77582Średnie
Tinyauth przed wersją 5.1.0 ujawnia zdalnie obserwowalną różnicę czasową między próbami uwierzytelnienia dla istniejących i nieistniejących lokalnych nazw użytkowników. Funkcje loginHandler i basicAuth zwracają szybko po zgłoszeniu brakującego użytkownika, podczas gdy istniejący użytkownik powoduje wykonanie kosztownej weryfikacji hasła bcrypt.
- CVE-2026-77561Średnie
Tinyauth przed wersją 5.1.0 pozwala nieuwierzytelnionemu zdalnemu atakującemu wysłać żądania POST /api/user/login z 257 różnymi nieistniejącymi nazwami użytkowników, aby wypełnić MaxLoginAttemptRecords i aktywować globalną blokadę logowania. Funkcja IsAccountLocked sprawdza ten globalny stan przed walidacją niepowiązanych kont, powodując, że prawidłowi użytkownicy otrzymują HTTP 429 przez około 300 sekund.
Oryginalny opis (angielski, źródło NVD)
Tinyauth is an authentication and authorization server. Prior to 5.1.2, Tinyauth compares forwarded hostnames case-sensitively while reverse proxies route equivalent hostnames case-insensitively, allowing an authenticated low-privilege user to bypass per-app access controls with a differently cased hostname. The lookup in internal/service/access_controls_service.go through lookupStaticACLs and GetAccessControls, and the Docker-label fallback in internal/service/docker_service.go through GetLabels, can miss the configured app and return an empty access-control object. internal/controller/proxy_controller.go proxyHandler then treats the empty user, group, OAuth, LDAP, and IP restrictions as permissive and returns an authenticated result for an app that should exclude the user. Unauthenticated users remain subject to login, and global login-time allowlists are not bypassed. This issue is fixed in version 5.1.2.

