Skip to content

Conversation

@B1rtek
Copy link

@B1rtek B1rtek commented Dec 2, 2025

1. Testy

Kod testów

Testy zostały umieszczone w pliku test/test_book_model.py. Zawarte w nim testy

  • tworzą dla każdego testu nową bazę danych w pamięci
  • sprawdzają poprawność zapisu poprawnych danych
  • sprawdzają, czy próba zapisu danych ekstremalnych, przypadków brzegowych, danych o złym typie lub takich zawierających potencjalne exploity jest możliwa
    Do testów została użyta biblioteka pytest.

Dockerfile

W pliku Dockerfile po linii instalującej zależności projektu znalazła się linijka uruchamiająca testy. Aby niepotrzebne nie wydłużać czasu buildu, który zostanie przerwany przez niepowodzenie testów pytest wywoływany jest z flagą -x która przerywa testy po pierwszym niepowodzeniu.

2. JWT

Wykorzystanie podatności

Wysyłając POST request do endpointu /jwt otrzymałem JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50IjoiQm9iIiwicm9sZSI6IlVzZXIiLCJpYXQiOjE3NjQ1NDk4MDcsImF1ZCI6Imh0dHBzOi8vMTI3LjAuMC4xL2p3dC9ub25lIn0.QL5PL3l5mxfFpzObkZ9oHZwt39Uh1JNJjgs4beVn0Ok

który dekoduje się jako

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "account": "Bob",
  "role": "User",
  "iat": 1764549807,
  "aud": "https://127.0.0.1/jwt/none"
}

z podpisem a-string-secret-at-least-256-bits-long

Zmieniając typ algorytmu na "none", konto na "administrator" oraz usuwając zupełnie sekcję zawierającą podpis uzyskałem JWT

eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJhY2NvdW50IjoiYWRtaW5pc3RyYXRvciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNzY0NTQ5ODA3LCJhdWQiOiJodHRwczovLzEyNy4wLjAuMS9qd3Qvbm9uZSJ9.

które przesłane do endpointu /jwt/none skutkuje uzyskaniem odpowiedzi
Pasted image 20251201020411

Naprawa podatności

W pliku app.js w linii 34 lista algorithms została zmieniona:

JWT.verify(jwt_token, secret_key, { algorithms: ['HS256'], complete: true, audience: 'https://127.0.0.1/jwt/none' }, (err, decoded_token) => {

Lista nie zawiera już pozycji "none" na liście dozwolonych algorytmów sprawdzania podpisu, uniemożliwiając uwierzytelnienie jako administrator poprzez prostą podmianę zawartości JWT.

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