0Pricing
Cryptology Academy · Lekcja

Luki w JWT: alg=none i pomylenie kluczy

Wykorzystać i naprawić najczęstsze błędy bezpieczeństwa JWT

Luki w JWT: alg=none i pomylenie kluczy to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Powierzchnia ataku JWT

Tokeny JWT są podpisane kryptograficznie, ale wiele bibliotek miało poważne podatności. Najczęściej wykorzystywane to atak alg=none, atak pomieszania RS256→HS256 oraz brute force słabego sekretu. Wszystkie wynikają z zaufania do pól nagłówka kontrolowanych przez atakującego.

Atak alg=none

Specyfikacja JWT dopuszcza alg:"none" dla niezabezpieczonych tokenów. Błędne biblioteki akceptowały tę wartość i całkowicie pomijały weryfikację podpisu. Atakujący modyfikuje payload (np. "role":"admin"), ustawia alg:"none", usuwa podpis, a serwer akceptuje token.

Przykład wykorzystania alg=none

Oryginał: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIn0.SIG Atak: eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZG1pbiJ9. (pusty podpis, końcowa kropka). Podatny serwer pomyślnie weryfikuje token i przyznaje dostęp administratora.

Naprawa alg=none

Nigdy nie akceptuj alg:"none" w środowisku produkcyjnym. Jawnie określaj dozwolone algorytmy: jwt.decode(token, key, algorithms=["HS256"]). Większość nowoczesnych bibliotek (PyJWT 2+, jsonwebtoken 9+) domyślnie odrzuca alg=none.

Pomieszanie kluczy RS256 → HS256

Jeśli serwer używa RS256, a klient zmieni alg na HS256, serwer może przeprowadzić weryfikację, używając klucza publicznego RSA jako sekretu HMAC. Ponieważ klucz publiczny jest... publiczny, atakujący podpisuje nim dowolne payloady, a serwer je weryfikuje.

Wykorzystanie pomieszania kluczy

Kroki: 1) Pobierz klucz publiczny z endpointu JWKS. 2) Zbuduj złośliwy payload. 3) Podpisz go za pomocą HMAC-SHA256, używając surowych bajtów klucza publicznego PEM jako sekretu HMAC. 4) Ustaw alg:"HS256" w nagłówku. 5) Ścieżka HS256 serwera pomyślnie przeprowadza weryfikację.

Naprawa pomieszania kluczy

Zawsze jawnie określaj oczekiwany algorytm w wywołaniu weryfikacji. Nigdy nie wyprowadzaj algorytmu z nagłówka tokenu. Używaj oddzielnych ścieżek kodu dla RS256 i HS256, których wywołujący nie może przełączać.

Brute force słabego sekretu

HS256 ze słabymi sekretami (o entropii mniejszej niż 256 bitów) można złamać metodą brute force offline. Narzędzia takie jak hashcat obsługują łamanie JWT: hashcat -a 0 -m 16500 token.txt wordlist.txt. Używaj kryptograficznie losowych sekretów o długości co najmniej 32 bajtów.

Wstrzyknięcie nagłówka przez kid

Nagłówek kid (identyfikator klucza) wskazuje, którego klucza należy użyć. Jeśli serwer używa kid jako parametru zapytania SQL lub ścieżki systemu plików bez odpowiedniego oczyszczenia: kid="../../dev/null" → HMAC z pustym kluczem → sfałszowany token zostaje zaakceptowany. Zawsze oczyszczaj kid.

Wstrzyknięcie nagłówka jwk

Nagłówek jwk zawiera osadzony klucz publiczny używany do weryfikacji. Podatny serwer może użyć bezpośrednio osadzonego klucza, pozwalając atakującemu dostarczyć własną parę kluczy, podpisać token kluczem prywatnym i osadzić klucz publiczny. Weryfikuj wyłącznie względem zarejestrowanych kluczy.

Ominięcie sprawdzania wygaśnięcia tokenu

Niektóre implementacje zapominały sprawdzać claim exp lub niespójnie korzystały z czasu serwera. Zawsze jawnie weryfikuj exp, nbf i iat. Używaj biblioteki, która domyślnie je sprawdza, i nigdy nie wyłączaj walidacji claimów w środowisku produkcyjnym.

Szybkie sprawdzenie

W ataku pomieszania kluczy RS256→HS256 czego atakujący używa jako sekretu HMAC?

Podsumowanie

Podatności JWT wynikają z zaufania do nagłówka alg, akceptowania alg=none i używania słabych sekretów. Naprawa: przypinaj algorytmy po stronie weryfikatora, używaj silnych sekretów i oczyszczaj kid. Dalej: bezpieczne praktyki implementacji JWT.

Często zadawane pytania

Czy lekcja „Luki w JWT: alg=none i pomylenie kluczy” jest bezpłatna?

Tak — pełny tekst „Luki w JWT: alg=none i pomylenie kluczy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Luki w JWT: alg=none i pomylenie kluczy”?

Wykorzystać i naprawić najczęstsze błędy bezpieczeństwa JWT Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Luki w JWT: alg=none i pomylenie kluczy”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?

Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowa JWT: nagłówek, ładunek i podpis
  2. HS256 a RS256: symetryczne i asymetryczne JWT
  3. Luki w JWT: alg=none i pomylenie kluczy
  4. Najlepsze praktyki bezpiecznej implementacji JWT
← Powrót do Cryptology Academy