Выбор ответа Senior Аутентификация и права обновлено

Подмена алгоритма JWT

Вопрос

Почему при проверке JWT нужно явно передавать список разрешённых алгоритмов (algorithms=["RS256"])?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Иначе подпишут другим алгоритмом (HS256 с публичным ключом или none) и пройдут. Заголовок токена контролирует атакующий.

Варианты ответа

  1. Без списка библиотека перебирает все алгоритмы по очереди, и проверка заметно медленнее
  2. Иначе подпишут другим алгоритмом (HS256 с публичным ключом или none) и пройдутправильный ответ
  3. Список нужен только для шифрования payload, на проверку подписи он не влияет
  4. Это требуется только для токенов без exp, у остальных алгоритм берётся из заголовка

Разбор

Заголовок токена контролирует атакующий. Если библиотека берёт алгоритм из заголовка, токен с alg: none или с HS256, подписанный общедоступным публичным ключом RSA как HMAC-секретом, может пройти проверку. Современные библиотеки требуют параметр algorithms, и его нужно задавать жёстко по типу ключа. Скорость и шифрование тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме