Luka oznaczona jako CVE-2026-46490 otrzymała ocenę 8.8 w skali CVSS (Common Vulnerability Scoring System – skala 0-10 oceniająca powagę luki). Dotyczy ona biblioteki samlify dla środowiska Node.js, używanej do implementacji mechanizmów logowania jednokrotnego, czyli SSO (Single Sign-On), w oparciu o protokół SAML 1. Wiele polskich firm technologicznych i startupów wykorzystuje Node.js, a SSO jest standardem w dostępie do systemów korporacyjnych. Błąd w obsłudze danych wejściowych może pozwolić zwykłemu użytkownikowi na uzyskanie uprawnień administratora.
Problem polega na sposobie, w jaki biblioteka przetwarza atrybuty użytkownika przed ich cyfrowym podpisaniem. Atakujący może spreparować wartość jednego ze swoich atrybutów, na przykład imienia lub adresu e-mail, aby wstrzyknąć do dokumentu SAML dodatkowe, nieautoryzowane uprawnienia. Podpisany przez zaufany serwer dokument staje się dla aplikacji docelowej wiarygodnym poświadczeniem, co może prowadzić do eskalacji uprawnień 2.
TL;DR
- Produkt:
samlify, biblioteka Node.js do obsługi protokołu SAML. - Wektor: Wstrzyknięcie XML (XML Injection) w atrybutach użytkownika przetwarzanych przez mechanizm SAML.
- Identyfikator: CVE-2026-46490 (CVSS 8.8, High).
- Wpływ: Eskalacja uprawnień. Użytkownik o niskich uprawnieniach może przypisać sobie dowolne role (np. administratora) w docelowej aplikacji.
- Kogo dotyczy: Aplikacje webowe zbudowane w oparciu o Node.js, które używają biblioteki
samlifyw wersji starszej niż 2.13.0. - Pierwszy ruch: Identyfikacja użycia
samlifyw projektach i natychmiastowa aktualizacja do wersji 2.13.0 lub nowszej.
Wektor ataku
Atak wykorzystuje błąd w logice przetwarzania szablonów XML w bibliotece samlify. Protokół SAML (Security Assertion Markup Language) opiera się na wymianie cyfrowo podpisanych dokumentów XML, zwanych asercjami, pomiędzy dostawcą tożsamości (IdP – Identity Provider) a dostawcą usługi (SP – Service Provider). W uproszczeniu, IdP to system, w którym się logujemy (np. firmowy Active Directory), a SP to aplikacja, do której chcemy uzyskać dostęp.
Problem w samlify polegał na niewystarczającym oczyszczaniu danych wejściowych. Wersje biblioteki starsze niż 2.13.0 poprawnie zabezpieczały jedynie konteksty atrybutów XML 3. Jednak wartości wstawiane bezpośrednio do treści elementów, takich jak <saml:AttributeValue>, nie były odpowiednio filtrowane 4.
Scenariusz ataku wygląda następująco:
-
Preparacja danych: Użytkownik o standardowych uprawnieniach modyfikuje jeden ze swoich atrybutów w systemie IdP. Może to być pole „Imię”, „Nazwisko” lub inne, które są synchronizowane z aplikacją. Wartość pola zostaje zmieniona tak, aby zawierała złośliwy fragment kodu XML 5.
Przykład złośliwej wartości w polu
email:</saml:AttributeValue></saml:Attribute><saml:Attribute Name="role"><saml:AttributeValue>admin</saml:AttributeValue> -
Wstrzyknięcie atrybutu: Biblioteka
samlify, tworząc asercję SAML, wstawia tę wartość bez odpowiedniego oczyszczenia. W efekcie wewnątrz dokumentu XML zamykany jest oryginalny atrybut (email), a następnie dodawany jest zupełnie nowy, spreparowany atrybut (rolez wartościąadmin) 6. -
Podpisanie asercji: Dostawca tożsamości (IdP) traktuje całą wygenerowaną strukturę jako prawidłową i podpisuje ją cyfrowo swoim kluczem prywatnym. Z jego perspektywy operacja jest poprawna 7.
-
Akceptacja przez usługę: Podpisana asercja jest przesyłana do dostawcy usługi (SP). Aplikacja docelowa weryfikuje podpis cyfrowy, który jest prawidłowy. Następnie odczytuje zawarte w asercji atrybuty, w tym ten wstrzyknięty przez atakującego 7.
-
Eskalacja uprawnień: Aplikacja przydziela użytkownikowi uprawnienia na podstawie odczytanych atrybutów. Ponieważ w asercji znajduje się atrybut
role=admin, użytkownik może otrzymać dostęp administracyjny 2.
Wskaźniki kompromitacji
Ta luka nie jest związana z typowymi wskaźnikami kompromitacji (IoC – Indicators of Compromise), takimi jak adresy IP czy hashe plików. Jedynym wskaźnikiem jest użycie podatnej na atak wersji biblioteki samlify.
Zespoły deweloperskie i bezpieczeństwa powinny natychmiast zweryfikować swoje projekty Node.js. Najprostszym sposobem jest sprawdzenie pliku package-lock.json lub yarn.lock w poszukiwaniu samlify i jego wersji.
Można również użyć wbudowanych narzędzi menedżera pakietów Node.js. W katalogu głównym projektu należy wykonać polecenie:
npm list samlify
# lub jeśli używasz yarn
yarn why samlify
Jeśli wynikiem jest wersja niższa niż 2.13.0, aplikacja jest podatna. Analiza logów po stronie dostawcy usługi (SP) w poszukiwaniu nietypowych lub zduplikowanych atrybutów w asercjach SAML może pomóc w wykryciu prób wykorzystania luki, ale jest to metoda mało precyzyjna i trudna do wdrożenia bez wcześniejszego przygotowania.
Co zrobić w 24-48h
Zalecane podejście zakłada natychmiastowe działanie, zwłaszcza w organizacjach, gdzie SSO jest kluczowym elementem architektury bezpieczeństwa. Dotyczy to zarówno polskich software house’ów tworzących oprogramowanie dla klientów, jak i firm utrzymujących własne aplikacje wewnętrzne.
-
Identyfikacja (Priorytet 1): Należy niezwłocznie przeskanować wszystkie repozytoria kodu pod kątem użycia biblioteki
samlify. Zautomatyzowane narzędzia do analizy składu oprogramowania (SCA – Software Composition Analysis) mogą znacząco przyspieszyć ten proces. -
Aktualizacja (Priorytet 1): We wszystkich zidentyfikowanych projektach należy zaktualizować
samlifydo wersji2.13.0lub nowszej 8. Można to zrobić za pomocą polecenia:npm install samlify@latest # lub yarn add samlify@latestNastępnie należy upewnić się, że plik blokujący wersje (
package-lock.json/yarn.lock) został zaktualizowany i wdrożony na środowisko produkcyjne. -
Weryfikacja (Priorytet 2): Po aktualizacji kluczowe jest przeprowadzenie testów regresji, aby potwierdzić, że mechanizm logowania jednokrotnego nadal działa poprawnie. Należy przetestować logowanie dla różnych ról użytkowników.
-
Analiza (Priorytet 3): Chociaż trudne, zaleca się przejrzenie logów audytowych systemów, które korzystały z podatnej biblioteki. Należy szukać anomalii, takich jak przyznanie podwyższonych uprawnień użytkownikom, którzy nie powinni ich mieć, zwłaszcza w okresie poprzedzającym aktualizację. Eskalacja uprawnień to incydent bezpieczeństwa, który może mieć konsekwencje w kontekście zgodności z RODO (Rozporządzenie o Ochronie Danych Osobowych), jeśli prowadził do nieautoryzowanego dostępu do danych osobowych.
Powyższe kroki nie zastępują pełnej konsultacji bezpieczeństwa, ale stanowią podstawę do szybkiej reakcji na zidentyfikowane zagrożenie.
Źródła
Zobacz też
- CVE-2026-8632: Eskalacja uprawnień w sterownikach HP dla Linuksa
- Krytyczna luka w Entra ID (CVE-2026-42901): Eskalacja do admina
- PostgreSQL: Luka SQL Injection (CVE-2026-6476) w wersjach 17 i 18
Footnotes
-
samlify to biblioteka Node.js przeznaczona do SAML single sign-on. — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩
-
Pozwalało to na eskalację uprawnień, gdy atrybuty były używane do autoryzacji (role/grupy). — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩ ↩2
-
Przed wersją 2.13.0, podstawianie szablonów w samlify uciekało tylko konteksty atrybutów. — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩
-
Wartości wstawiane do tekstu elementu (np. saml:AttributeValue) nie były uciekane. — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩
-
Zwykły użytkownik mógł wstrzyknąć znacznik XML do wartości atrybutu (np. email, nazwa). — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩
-
Użytkownik mógł dodać nowe elementy saml:Attribute wewnątrz podpisanego potwierdzenia. — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩
-
IdP (Identity Provider) podpisywał zmienione potwierdzenie, a SP (Service Provider) akceptował wstrzyknięte atrybuty jako zaufane. — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩ ↩2
-
Problem został załatany w wersji 2.13.0 biblioteki samlify. — https://nvd.nist.gov/vuln/detail/CVE-2026-46490 ↩
// Komentarze ...
Dodaj komentarz