Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 646

Уязвимости JWT

ПроверилCybersecurity entrepreneur & security researcher

Что такое Уязвимости JWT?

Уязвимости JWTКлассы ошибок в реализации проверки JSON Web Token, позволяющие подделывать токены, повышать привилегии или обходить аутентификацию.


JSON Web Token несут утверждения об аутентификации и авторизации, однако гибкость объявляемого в заголовке алгоритма подписи породила несколько повторяющихся классов уязвимостей. Баг alg=none, раскрытый Тимом Маклином в 2015 году, возникает, когда верификатор доверяет собственному заголовку alg токена и обращается к верификатору «none», который возвращает истину для пустой подписи, — это позволяет злоумышленнику переписать полезную нагрузку и удалить подпись. Он был исправлен в библиотеке jsonwebtoken для Node до версии 4.2.2 (CVE-2015-9235).

Путаница ключей (key confusion, CVE-2016-10555) тоньше: если сервер принимает и RS256, и HS256, злоумышленник подписывает токен с помощью HMAC, используя публичный RSA-ключ сервера как общий секрет; наивный верификатор передаёт этот публичный ключ в HS256.verify(), и подделка проходит проверку. К смежным проблемам относятся слабые секреты HS256, поддающиеся офлайн-перебору с помощью hashcat, отсутствие проверок exp/nbf и точки внедрения через заголовок — обход каталогов или SQL-инъекция через kid, а также подконтрольные злоумышленнику поля jwk/jku/x5u, которые направляют проверку на ключ, принадлежащий атакующему. В 2022 году уязвимость CVE-2022-23529 в jsonwebtoken вызвала опасения по поводу RCE через специально сформированный объект ключа (позже отозвана после того, как предпосылки для эксплуатации были оспорены).

Меры защиты: жёстко фиксируйте принимаемый алгоритм (алгоритмы) на стороне сервера и никогда не считывайте alg из недоверенного ввода, используйте стойкие асимметричные ключи, валидируйте kid по списку разрешений, игнорируйте встроенные URL-адреса ключей, обеспечивайте проверку срока действия и относитесь к каждому полю JWT как к враждебному вводу.

flowchart TD
  A[Злоумышленник получает валидный JWT] --> B{Подмена заголовка}
  B -->|alg none, удалить подпись| C[Верификатор пропускает проверку?]
  B -->|RS256 в HS256| D[HMAC с публичным ключом]
  B -->|jku / kid указывает на ключ атакующего| E[Проверка по ключу злоумышленника]
  C -->|Да| F[Поддельный токен принят]
  D -->|Да| F
  E -->|Да| F
  F --> G[Повышение привилегий / обход аутентификации]
  C -->|Фиксированный alg| H[Отклонено]
  D -->|Фиксированный alg| H
  E -->|kid по списку разрешений| H

Примеры

  1. 01

    Заголовок {"alg":"none"}, принимаемый неправильно настроенной библиотекой.

  2. 02

    Сервер проверяет RS256-токен, используя свой публичный ключ как HMAC-секрет HS256.

Частые вопросы

Что такое Уязвимости JWT?

Классы ошибок в реализации проверки JSON Web Token, позволяющие подделывать токены, повышать привилегии или обходить аутентификацию. Относится к категории Безопасность приложений в кибербезопасности.

Что означает Уязвимости JWT?

Классы ошибок в реализации проверки JSON Web Token, позволяющие подделывать токены, повышать привилегии или обходить аутентификацию.

Как защититься от Уязвимости JWT?

Защита от Уязвимости JWT обычно сочетает технические меры и операционные практики, как описано в определении выше.

Связанные термины