К списку
Безопасность и авторизацияSeniorТехническое

Как тестировать защиту от атак с использованием 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