Воздействие атакующего
Неправильная проверка 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].
