Учебный стенд на Flask для демонстрации уязвимости JWT Algorithm Confusion.
docker compose up --buildТестовые аккаунты:
user@nexus.io:user1234 - user
editor@nexus.io:edit5678 - editor
Сервер подписывает JWT приватным RSA-ключом (RS256) и публикует публичный ключ через /api/public-key.
Проблема в decode_token() внутри auth.py:
Алгоритм проверки берётся из заголовка самого токена, а ключ выбирается в зависимости от него. При alg=HS256
сервер использует публичного ключа как HMAC-секрет. Эти же байты доступны через /api/public-key.