← Каталог / nodejs / Auth Bypass 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`-роль (пароль администратора неизвестен) |
Похожие лабораторные
Ещё лабораторные по этому типу уязвимости
Регистрация принимает любой пароль без проверки сложности. Пароль администратора — 'admin'.
nodejseasyPro
Exploit Fix
Форма входа Express-приложения не ограничивает количество попыток, позволяя подобрать пароль администратора перебором по словарю.
nodejsmediumPro
Exploit Fix
Обработчик входа раскрывает существование пользователей через разницу во времени ответа — bcrypt вызывается только для существующих аккаунтов.
nodejsmediumPro
Exploit Fix
Сервер принимает JWT с alg:none и доверяет роли из claims — подделайте токен для получения прав администратора в SecureShop.
nodejsmediumPro
Exploit Fix
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы —
support@hackandfix.ru