Перейти к содержимому
← Каталог nodejs CSRF

JWT: Key Confusion (RS256 to HS256) на jsonwebtoken

Express-приложение подписывает JWT через RS256 и публикует RSA публичный ключ через JWKS-эндпоинт. Функция верификации вызывает jwt.verify без явного whitelist алгоритмов — это позволяет атакующему подписать HS256-токен публичным ключом и получить admin-доступ.

hardnodejsPro
Задача
# JWT: атака на путаницу алгоритмов (Key Confusion) ## Сценарий Перед вами Express-приложение интернет-магазина 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