Типовые "грешки" использования JWT
28 октября 2025 г.·205 views

Типовые "грешки" использования JWT

Салют,

Тут недавно пересекался с коллегами, с которыми записывали подкаст по безопасной разработке - инфо тут.

Так вышло, что хотел бы поделиться с вами интересным подходом, чем-то напоминает классическую модель. У этих ребят, занимающихся консалтингом и Compliance, есть обзоры в части рисков ИБ по теме уязвимостей в разработке.

Один из интересных постов вот этот. Автор разбирает обход аутентификации в вебе, описывает вектора атак и как минимизировать их. Прочитав вы можете увидеть, что в зависимости от кейса можем акцентироваться на самом принципе и докрутить.

Давай посмотрим на JWT сессии в том же ключе на примере обычного внедрения

Посмотрим на такой кейс, когда используется JWT, но просто реализован механизм выдачи без каких то мер безопасности, что обычно и бывает на практике, так как платят за быструю фичу в проде, что бы работало и легло. Сначала разберем, что это:

JWT (Json Web Token) токен аутентификации пользовательской сессии, то есть самого пользователя для запросов к методам API. Нужен для передачи учетных данных к серверу на каждый вызываемый метод.

Таким образом сам механизм показывает, что мы можем ограничить доступность учетных данных во вне при взаимодействии, например, с контрагентом и нами по API и при этом нам не надо обращаться в БД для валидации напрямую, что растягивает время на исполнение процедуры. Детально можешь почитать тут.

Таким образом мы в явном виде гарантируем, что зашифрованные значения всегда могут помочь сократить риск утечки и взлома пользовательских данных при их перехвате. Также стоит дополнять механизмы специальными методами, такими как:

- путем ограничения его временем жизни

- валидация изначально проверяет время жизни токена

- blacklist

- защищенный канал передачи данных

- сброс сессии после конца времени жизни токена в неактивном состоянии

- привязка к action button в случае активности пользователя внутри окна аутентифицированного приложения

- дебажить на jwt.io вне команды разработки для тестов ИБ путем модификации

- не передавать чувствительные пользовательские данные (база)

- использовать ключевые фразы большой длины и их периодическое изменение

- принудительная смена токенов

- на стороне приложения реализовать белый список разрешенных алгоритмов

- санитизировать полученные от пользователей данные

- мы можем просто отозвать токен в любой момент времени, а после его перевыпустить

- дополнительно можем использовать контроль версии

- усилить схему подписи по модели Эскроу

- покрыть солью (salt) в специфичных случаях

Получается, что мы имеем access token - доступ при каждом запросе, refresh token - перевыпуск пары, а также указанное значение жизни по time-delay. Сама структура состоит из данных в payload, header как тип и алгоритм шифрования, cripto signature.

Итого: базово механизм реализует только обновление и передачу, но без доп мер защиты могут быть реализованы атаки по типу:

- отсутствие проверки подписи, где если поставить alg none, сервер неподписанный токен примет в явном виде с payload и права например admin

- манипуляция ключевыми идентификаторами из-за отсутствия сложности key id

- подбор ключа симметричной подписи и подбор ключевой фразы

- для ассиметричных путем изменения алгоритма через hex с использование логических ошибок реализации

- перехват токена и UrlDecode

И да, все-таки стоит посмотреть на коллег и их кейсы в AKTIV.CONSULTING @aktivcons.

#reco #reserch #secrets #pmcases

#reco#reserch#secrets#pmcases
Открыть в Telegram