FixVibe
Covered by FixVibehigh

JWT Bezpieczeństwo: ryzyko związane z niezabezpieczonymi tokenami i brakiem weryfikacji roszczeń

Tokeny internetowe JSON (JWT) zapewniają standard przesyłania oświadczeń, ale bezpieczeństwo opiera się na rygorystycznej weryfikacji. Brak weryfikacji podpisów, czasów wygaśnięcia lub docelowych odbiorców umożliwia atakującym ominięcie uwierzytelnienia lub odtworzenie tokenów.

CWE-347CWE-287CWE-613

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świadczenie aud (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 aud zawiera wartość identyfikującą usługę lokalną; jeżeli usługa nie jest zidentyfikowana w żądaniu aud, 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) i aud (odbiorcy) w ładunku JSON [S1].
  • Testowanie sprawdzające: Testowanie, czy serwer poprawnie odrzuca tokeny, które wygasły zgodnie z twierdzeniem exp lub są przeznaczone dla innego odbiorcy zgodnie z definicją aud [S1].