Перейти к содержимому

Поиск по платформе

JWT Authentication: Взлом слабой криптографии

В этой лаборатории сервер использует JWT для авторизации, но совершает сразу две критические ошибки: использует слабый секретный ключ и доверяет заголовку alg.

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Сложно+90 XP ~65 мин golang
CWE-287 · A07:2021 Pro
Обложка: JWT Authentication: Взлом слабой криптографии Обложка: JWT Authentication: Взлом слабой криптографии
Задача
# JWT: обход проверки подписи через алгоритм без подписи ## Сценарий **FotoVault** — магазин фототехники с арендой объективов. Аутентификация построена на JWT: после входа сервер выдаёт подписанный токен, браузер хранит его в cookie, и каждый запрос проходит проверку подписи. Бэкендер Женя настроил валидатор «строго по документации» и готов поклясться, что токен без знания секрета не пройдёт. Служба безопасности подозревает обратное и поручила вам проверить валидатор с учётной записи обычного покупателя: в админ-панели магазина хранится конфиденциальная метка. ## Цель 1. Изучите токен, который сервер выдаёт после входа: структуру, алгоритм в заголовке, состав claims. 2. Найдите способ собрать токен с нужными claims, не зная серверного секрета, — воспользуйтесь доверием валидатора к содержимому заголовка токена. 3. Получите доступ к админ-панели с подделанным токеном и извлеките флаг. ## Теория JWT состоит из трёх base64url-частей, разделённых точками: заголовка (в нём токен сам объявляет алгоритм подписи), полезной нагрузки с claims и подписи. Подпись доказывает, что claims не менялись после выдачи токена. В спецификации исторически остался алгоритм со значением «токен без подписи»: он задумывался для каналов, уже защищённых на транспортном уровне, но в публичных HTTP-API превращает проверку в фикцию — если валидатор его разрешает, доказательства целостности claims отсутствуют вовсе. Уязвимость обычно живёт не в библиотеке, а в её конфигурации: разработчик явно расширяет список разрешённых алгоритмов, копируя пример из документации или «специально для тестирования». **Уязвимый паттерн:** ```go // Валидатор разрешает алгоритм без подписи: if token.Method.Alg() == "none" { return jwt.UnsafeAllowNoneSignatureType, nil } ``` Механика атаки: атакующий самостоятельно кодирует заголовок и payload с нужной ролью и сроком действия, подпись опускает и подменяет cookie. Валидатор, доверившись объявлению в заголовке, принимает токен — и авторизация по claims срабатывает как для настоящего администратора. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Учётные данные | `demo` / `demo` | | Вход | `POST /login` (выдаёт cookie `token` с JWT) | | Привилегированная зона | `GET /admin` (требует роль администратора в claims) |

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: Timing Attack: Перечисление Пользователей Обложка лабы: Timing Attack: Перечисление Пользователей
Auth

Timing Attack: Перечисление Пользователей

Обработчик логина имеет разное время ответа для существующих и несуществующих пользователей, что позволяет перечислять аккаунты.

+90 XP
Go Pro
Exploit Fix
Обложка лабы: JWT Key Confusion (RS256 to HS256) Обложка лабы: JWT Key Confusion (RS256 to HS256)
Auth

JWT Key Confusion (RS256 to HS256)

JWT RS256/HS256 key confusion: the server exposes the public key and doesn't enforce the signing algorithm, allowing token forgery via algorithm switch.

+90 XP
Go Pro
Exploit Fix
Обложка лабы: Предсказуемые Токены Сессии (MD5) Обложка лабы: Предсказуемые Токены Сессии (MD5)
Auth

Предсказуемые Токены Сессии (MD5)

Сессионные токены генерируются через MD5(username), что позволяет предсказать токен администратора и захватить его сессию.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Небезопасный Сброс Пароля (IDOR) Обложка лабы: Небезопасный Сброс Пароля (IDOR)
Auth

Небезопасный Сброс Пароля (IDOR)

Форма сброса пароля принимает user_id из клиента, позволяя атакующему сбросить пароль любого пользователя через IDOR.

+60 XP
Go Pro
Exploit Fix