Перейти к содержимому
← Каталог python Auth Bypass

JWT: Key Confusion (RS256 to HS256)

Сервер подписывает JWT через RS256, но не проверяет алгоритм при валидации. Атакующий скачивает публичный ключ и подписывает HS256-токен этим ключом как HMAC-секретом.

hardpythonPro
Задача
# JWT: атака на путаницу алгоритмов (Key Confusion) ## Сценарий Перед вами Flask-приложение интернет-магазина SecureShop. Аутентификация построена на JWT-токенах с **асимметричной подписью**: сервер подписывает токены приватным RSA-ключом, а проверяет — соответствующим публичным ключом. Публичный ключ по стандартной для JWT-систем практике опубликован — клиенты могут самостоятельно проверить подпись токена. В реализации проверки на стороне сервера допущена ошибка из категории *JWT Algorithm Confusion*. Когда обе схемы подписи (асимметричная RSA и симметричный HMAC) присутствуют в коде верификатора одновременно, клиент при определённых условиях может вынудить сервер использовать «не тот» механизм проверки — и получить административный доступ, не обладая ни приватным ключом, ни паролем admin'а. ## Цели 1. Авторизуйтесь как `demo` / `demo` и изучите токен в cookie клиента. 2. Найдите способ, которым приложение раздаёт информацию о ключе подписи (это нормальная практика для асимметричной подписи), и поймите, какие именно данные оно отдаёт. 3. Сформируйте JWT-токен, который сервер примет за валидный и который выдаст административные права, не используя при этом приватный ключ сервера. 4. Откройте админ-панель и извлеките CTF-флаг. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` | | Цель | `admin`-роль (пароль администратора неизвестен) |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru