CVE-2026-86756
ŚrednieCVSS 6.1Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 9 - wyżej niż 9% wszystkich znanych CVE
Streszczenie
Snipe-IT 8.5.0 do 8.6.3 zawiera podatność na otwarte przekierowanie w punkcie końcowym SAML assertion-consumer (SamlController::acs, POST /saml/acs). Punkt końcowy zapisywał parametr RelayState POST bezpośrednio do klucza sesji url.intended Laravel z usuniętymi tylko znakami CR/LF, a LoginController później wydawał redirect()->intended(), który przekazuje absolutny URL bez zmian do nagłówka Location. Nieuwierzytelniony atakujący, który nakłoni użytkownika instancji z włączonym SAML-SSO do odwiedzenia spreparowanego linku SSO inicjowanego przez IdP, może spowodować przekierowanie przeglądarki ofiary na dowolny zewnętrzny absolutny URL natychmiast po pomyślnym uwierzytelnieniu, co według porady ułatwia phishing mający na celu kradzież poświadczeń. Nie jest wymagane żadne konto w docelowej instancji ani kompromitacja dostawcy tożsamości. Dotknięte są tylko wdrożenia z włączonym SAML SSO. Naprawione w 8.7.0 (commit d30b73d, PR #19386), które waliduje RelayState przez nową funkcję Helper::sameOriginUrl przed zapisaniem.
Ocena ryzyka
Otwarte przekierowanie może być wykorzystane do phishingu i kradzieży poświadczeń, co może prowadzić do naruszenia bezpieczeństwa kont użytkowników.
Rekomendacja
Zaktualizuj Snipe-IT do wersji 8.7.0 lub nowszej, która waliduje RelayState przed zapisaniem.
Inne podatności w Snipe-IT
Zobacz wszystkie- CVE-2026-88894Średnie
Ścieżka realizacji predefiniowanych zestawów (kit checkout) w Snipe-IT nie egzekwuje izolacji dzierżawców Full Multiple Company Support (FMCS) na celu realizacji. W przeciwieństwie do innych ścieżek realizacji, App\Services\PredefinedKitCheckoutService nigdy nie wywołuje $item->canCheckoutTo($target); wykonuje jedynie sprawdzenie polityki aktor-vs-element oraz sprawdzenie dostępności przed zapisaniem realizacji. Przy włączonym FMCS użytkownik niebędący superużytkownikiem, należący do co najmniej dwóch firm i posiadający uprawnienie assets.checkout, może wysłać żądanie POST do /kits/{kit}/checkout z user_id należącym tylko do firmy B i przypisać temu użytkownikowi zasób firmy A (podobnie licencje, materiały eksploatacyjne i akcesoria zestawu), omijając sprawdzenie niezgodności firm. Problem naprawiono w Snipe-IT 8.7.2.
- CVE-2026-63498Wysokie
Snipe-IT przed wersją 8.7.0 pozwala uwierzytelnionemu użytkownikowi z uprawnieniami do zarządzania plikami na przesyłanie załączników XML i XSLT oraz żądanie ich z parametrem inline=true. Przeglądarka może przetworzyć odniesienie xml-stylesheet i wykonać JavaScript wygenerowany przez arkusz stylów w kontekście Snipe-IT. Ofiara musi otworzyć URL załącznika, po czym skrypt może czytać dane samego pochodzenia i wykonywać uwierzytelnione działania z uprawnieniami ofiary.
- CVE-2026-63493Wysokie
Snipe-IT przed wersją 8.7.0 pozwala sesji uwierzytelnionej hasłem dla konta z uprawnieniem self.api na dostęp do API tokenów osobistych przed ukończeniem wyzwania drugiego czynnika, ponieważ CheckForTwoFactor jest egzekwowane w grupie middleware web, ale nie w grupie API. Token może czytać i modyfikować zasoby z uprawnieniami ofiary, a dla administratora może dotrzeć do punktu końcowego users/two_factor_reset, co umożliwia przejęcie konta administratora.
- CVE-2026-62368Wysokie
Snipe-IT przed wersją 8.7.0 pozwala użytkownikowi z uprawnieniem customfields.create na przechowywanie znaczników w CustomField.name, które są przypisywane jako nieucieczkowy tytuł nagłówka bootstrap-table. Gdy inny użytkownik otworzy stronę listy zasobów, przechowywane znaczniki wykonują się na stronie w sesji ofiary, co może ujawnić dane samego pochodzenia i wykonać uwierzytelnione działania, w tym eskalację uprawnień.
- CVE-2026-86774Średnie
Snipe-IT przed wersją 8.7.0 zawiera podatność polegającą na uszkodzonej kontroli dostępu w AssetModelPolicy, gdzie metoda files() kaskaduje z uprawnienia assets.files, umożliwiając uwierzytelnionym użytkownikom przesyłanie i usuwanie załączników w rekordach Asset Model bez wymaganego uprawnienia models.files. Atakujący posiadający tylko uprawnienie assets.files mogą modyfikować współdzielone załączniki modeli ponad granicami firm i ominąć dedykowane uprawnienie models.files, które ma ograniczać zarządzanie plikami we wspólnym katalogu Asset Model.
- CVE-2026-86773Średnie
Snipe-IT do wersji 8.6.3 nie przeprowadza autoryzacji na poziomie obiektu w endpointach updateLicense, updateConsumable, updateAccessory i updateModel oraz w endpointcie storeModel dla Predefined Kits. Istniejąca kontrola autoryzuje tylko nadrzędny Predefined Kit (aktualizacja PredefinedKit), a nie dołączany obiekt podrzędny. W rezultacie uwierzytelniony użytkownik posiadający tylko uprawnienie kits.edit może dołączyć Licencję, Materiał eksploatacyjny, Akcesorium lub Model zasobu, których odczyt jest mu zabroniony (HTTP 403), do Predefined Kit, a indeks relacji zestawu ujawnia nazwę dołączonego obiektu temu użytkownikowi z niskimi uprawnieniami. Jest to odpowiednik ścieżki aktualizacji i storeModel dla CVE-2026-55478, który naprawił tylko metody storeLicense, storeConsumable i storeAccessory w wersji 8.6.2. Należy zauważyć, że updateModel był podatny w kodzie w wersji 8.6.3, ale nieosiągalny w praktyce z powodu literówki w nazwie trasy, która wiązała trasę z nieistniejącą metodą kontrolera, powodując odpowiedzi HTTP 500. Problem został naprawiony w Snipe-IT 8.7.0.
- CVE-2026-86772Średnie
Snipe-IT przed wersją 8.7.0 zawiera podatność na trwały atak XSS w metodzie DepartmentPresenter::formattedNameLink(), gdzie nazwy działów są renderowane bez escapowania w gałęzi fallback dla użytkowników bez uprawnienia departments.view. Użytkownicy z uprawnieniem departments.edit mogą wstrzykiwać złośliwe skrypty do nazw działów, które wykonują się w przeglądarkach wszystkich członków działu podczas ładowania strony My Assets.
- CVE-2026-86771Wysokie
Snipe-IT przed wersją 8.7.0 nie koduje znaków HTML w polu employee_num w generatorze PDF akceptacji, co pozwala atakującym z uprawnieniami users.edit na wstrzyknięcie tagów img do funkcji writeHTML() TCPDF. Atakujący może utworzyć złośliwą wartość employee_num zawierającą tag img z dowolnym adresem HTTP(S), co powoduje żądania po stronie serwera do wewnętrznych usług, punktów końcowych metadanych chmury lub zewnętrznych celów, gdy ofiara podpisze akceptację zasobu.
- CVE-2026-86770Wysokie
Snipe-IT przed wersją 8.7.0 nie sprawdza wielkości liter w nazwach użytkowników podczas uwierzytelniania SAML, co pozwala atakującym na uwierzytelnienie się jako inni użytkownicy poprzez rejestrację kont IdP z wariantami akcentów lub wielkości liter nazw ofiar. Atakujący mogą wykorzystać domyślną kolację bazy danych utf8mb4_unicode_ci, aby ominąć dopasowanie nazw użytkowników i przejąć konta przez ścieżki logowania federacyjnego, w tym SAML, LDAP i OAuth.
- CVE-2026-86769Średnie
Snipe-IT przed wersją 8.7.0 zawiera podatność niewłaściwego zarządzania własnością w punkcie końcowym API wydawania materiałów eksploatacyjnych, gdzie w kolumnie created_by zapisywane jest id docelowego użytkownika zamiast id uwierzytelnionego wywołującego. Uwierzytelnieni atakujący z uprawnieniem consumables.checkout mogą przeprowadzać wydania, które powodują błędne wpisy w dzienniku audytu w tabeli przestawnej consumables_users, zaciemniając, który operator wykonał akcję.
Oryginalny opis (angielski, źródło NVD)
Snipe-IT 8.5.0 through 8.6.3 contains an open redirect vulnerability in its SAML assertion-consumer endpoint (SamlController::acs, POST /saml/acs). The endpoint wrote the RelayState POST parameter directly into Laravel's url.intended session key with only CR/LF characters stripped, and LoginController later issued redirect()->intended(), which passes an absolute URL through to the Location header unchanged. An unauthenticated attacker who induces a user of a SAML-SSO-enabled instance to visit a crafted IdP-initiated SSO link can therefore cause the victim's browser to be redirected to an arbitrary absolute external URL immediately after a successful authentication, which the advisory notes facilitates credential-harvesting phishing. No account on the target instance and no compromise of the identity provider are required. Only deployments with SAML SSO enabled are affected. Fixed in 8.7.0 (commit d30b73d, PR #19386), which validates RelayState via a new Helper::sameOriginUrl check before storing it.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

