Wpływ atakującego
Nieprawidłowa walidacja JWT umożliwia atakującym ominięcie mechanizmów uwierzytelniania poprzez fałszowanie oświadczeń lub ponowne wykorzystanie wygasłych tokenów [S1]. Jeśli serwer akceptuje tokeny bez prawidłowego podpisu, osoba atakująca może zmodyfikować ładunek w celu eskalacji uprawnień lub podszyć się pod dowolnego użytkownika [S1]. Co więcej, brak wyegzekwowania roszczenia o wygaśnięcie (exp) umożliwia osobie atakującej używanie skompromitowanego tokena przez czas nieokreślony [S1].
Główna przyczyna
Token internetowy JSON (JWT) to struktura oparta na formacie JSON używana do reprezentowania oświadczeń podpisanych cyfrowo lub chronionych integralnością [S1]. Awarie bezpieczeństwa zazwyczaj wynikają z dwóch głównych luk wdrożeniowych:
- Akceptacja niezabezpieczonych JWT: Jeśli usługa nie wymusza ściśle weryfikacji podpisu, może przetwarzać „Niezabezpieczone JWT”, jeśli podpis jest nieobecny, a algorytm jest ustawiony na „none” [S1]. W tym scenariuszu serwer ufa oświadczeniom zawartym w ładunku bez sprawdzania ich integralności [S1].
- Weryfikacja braku roszczenia: Roszczenie
exp(czas wygaśnięcia) określa czas, w którym lub po którym JWT nie może zostać przyjęty do przetwarzania [S1]. Oświadczenieaud(odbiorcy) identyfikuje zamierzonych odbiorców tokena [S1]. Jeżeli te nie zostaną zaznaczone, serwer może zaakceptować tokeny, które wygasły lub były przeznaczone dla innej aplikacji [S1].
Poprawki betonu
- Wymuś podpisy kryptograficzne: Skonfiguruj aplikację tak, aby odrzucała wszelkie JWT, które nie korzystają z wstępnie zatwierdzonego, silnego algorytmu podpisywania (takiego jak RS256).
- Sprawdź datę ważności: Wprowadź obowiązkową kontrolę, aby upewnić się, że bieżąca data i godzina są wcześniejsze niż godziny określone w roszczeniu
exp[S1]. - Sprawdź odbiorców: Upewnij się, że oświadczenie
audzawiera wartość identyfikującą usługę lokalną; jeżeli usługa nie jest zidentyfikowana w żądaniuaud, token należy odrzucić [S1]. - Zapobiegaj powtórzeniu: Użyj żądania
jti(JWT ID), aby przypisać unikalny identyfikator do każdego tokena, umożliwiając serwerowi śledzenie i odrzucanie ponownie użytych tokenów [S1].
Strategia wykrywania
Luki w obsłudze JWT można zidentyfikować analizując strukturę tokenów i zachowanie odpowiedzi serwera:
- Kontrola nagłówka: Sprawdzanie nagłówka
alg(algorytmu) w celu upewnienia się, że nie jest on ustawiony na „brak” i wykorzystuje oczekiwane standardy kryptograficzne [S1]. - Weryfikacja roszczenia: Potwierdzenie obecności i ważności roszczeń
exp(wygaśnięcie) iaud(odbiorcy) w ładunku JSON [S1]. - Testowanie sprawdzające: Testowanie, czy serwer poprawnie odrzuca tokeny, które wygasły zgodnie z twierdzeniem
explub są przeznaczone dla innego odbiorcy zgodnie z definicjąaud[S1].
