Как тестировать защиту от атак с использованием JWT none algorithm и kid injection
Краткий ответ
Необходимо проверить строгую проверку поля alg, использовать белый список допустимых ключей и исключать доверие к заголовкам jku без дополнительной валидации.
Развёрнуто
Краткий ответ
Для защиты от атак с использованием алгоритма none и подмены kid в JWT тесты должны включать проверку, что поле alg строго валидируется и не допускает none, проверку белого списка ключей для kid, а также отказ от доверия к внешним заголовкам jku без их надёжной проверки.
Как это работает
JWT (JSON Web Token) содержит заголовок, в котором указывается алгоритм подписи (alg) и идентификатор ключа (kid). Атака с использованием none алгоритма эксплуатирует возможность пропуска подписи, если сервер неверно обрабатывает этот параметр. Подмена kid позволяет злоумышленнику подставить ключ, который сервер примет за валидный.
Ключевые меры:
- Строгая проверка
alg: сервер должен принимать только заранее определённые алгоритмы, игнорируя или отклоняя токены сalg: none. - Whitelist для
kid: сервер хранит список допустимых идентификаторов ключей и отвергает неизвестные. - Валидация
jku: полеjku, содержащее URL с ключом, не должно приниматься без дополнительной проверки, чтобы избежать загрузки вредоносных ключей.
| Элемент JWT | Возможная уязвимость | Меры защиты |
|---|---|---|
| alg | Использование none алгоритма | Отказ от none, жёсткая проверка |
| kid | Подмена ключа | Белый список допустимых ключей |
| jku | Загрузка внешних ключей | Игнорирование или проверка URL |
Пример
JWT Header:
{
"alg": "HS256",
"kid": "key-123",
"jku": "https://trusted.example.com/keys.json"
}
Тесты должны убедиться, что:
- alg не равен "none"
- kid присутствует в whitelist ["key-123", "key-456"]
- jku либо отсутствует, либо ведёт на доверенный URL
Что важно знать на собеседовании
- Атака через
alg: noneпозволяет обходить проверку подписи, если сервер не фильтрует такие токены. - Подмена
kidможет привести к использованию злоумышленником собственного ключа для подписи. - Поле
jkuпотенциально опасно, так как указывает на внешний источник ключа. - Тестирование должно включать проверку как валидных, так и специально сформированных вредоносных токенов.
- Использование белого списка ключей и жёсткая политика безопасности JWT значительно снижают риск атак.
Тема: Безопасность и авторизация | Уровень: senior