FixVibe
Covered by FixVibehigh

JWT Безопасность: риски незащищенных токенов и отсутствия подтверждения заявки

Веб-токены JSON (JWT) предоставляют стандарт для передачи утверждений, но безопасность зависит от строгой проверки. Неспособность проверить подписи, сроки действия или целевую аудиторию позволяет злоумышленникам обойти аутентификацию или воспроизвести токены.

CWE-347CWE-287CWE-613

Воздействие атакующего

Неправильная проверка JWT позволяет злоумышленникам обходить механизмы аутентификации путем подделки утверждений или повторного использования токенов с истекшим сроком действия [S1]. Если сервер принимает токены без действительной подписи, злоумышленник может изменить полезную нагрузку, чтобы повысить привилегии или выдать себя за любого пользователя [S1]. Кроме того, невыполнение требования об истечении срока действия (exp) позволяет злоумышленнику использовать скомпрометированный токен в течение неопределенного времени [S1].

Основная причина

Веб-токен JSON (JWT) — это структура на основе JSON, используемая для представления утверждений, имеющих цифровую подпись или защищенную целостность [S1]. Сбои в системе безопасности обычно возникают из-за двух основных недостатков реализации:

  • Принятие незащищенных JWT. Если служба строго не обеспечивает строгую проверку подписи, она может обрабатывать «незащищенные JWT», где подпись отсутствует и для алгоритма установлено значение «нет» [S1]. В этом сценарии сервер доверяет утверждениям в полезных данных, не проверяя их целостность [S1].
  • Отсутствует проверка заявки: Заявление exp (время истечения срока действия) определяет время, в которое или после которого JWT не должен быть принят для обработки [S1]. Утверждение aud (аудитория) определяет предполагаемых получателей токена [S1]. Если они не отмечены флажком, сервер может принимать токены с истекшим сроком действия или предназначенные для другого приложения [S1].

Конкретные исправления

  • Принудительное использование криптографических подписей. Настройте приложение так, чтобы оно отклоняло любой JWT, который не использует предварительно утвержденный надежный алгоритм подписи (например, RS256).
  • Проверка срока действия. Реализуйте обязательную проверку, чтобы убедиться, что текущая дата и время предшествуют времени, указанному в утверждении exp [S1].
  • Проверка аудитории. Убедитесь, что утверждение aud содержит значение, идентифицирующее локальную службу; если служба не идентифицирована в утверждении aud, токен должен быть отклонен [S1].
  • Предотвратить повторное воспроизведение. Используйте утверждение jti (JWT ID), чтобы назначить уникальный идентификатор каждому токену, что позволит серверу отслеживать и отклонять повторно используемые токены [S1].

Стратегия обнаружения

Уязвимости в обработке JWT можно выявить путем анализа структуры токена и поведения ответа сервера:

  • Проверка заголовка: проверка заголовка alg (алгоритм), чтобы убедиться, что для него не установлено значение «нет» и используются ожидаемые криптографические стандарты [S1].
  • Проверка утверждений: подтверждение наличия и действительности утверждений exp (срок действия) и aud (аудитория) в полезных данных JSON [S1].
  • Проверочное тестирование: проверка того, правильно ли сервер отклоняет токены, срок действия которых истек в соответствии с утверждением exp или которые предназначены для другой аудитории, как определено утверждением aud [S1].