Как обойти защиту JWT?
В этом видео инженер по безопасности приложений Swordfish Security Денис Данилов разбирает уязвимость стандарта передачи данных JSON Web Token (JWT).
Суть уязвимости
JWT состоит из трех частей:
Header — заголовок, где указывается алгоритм подписи (например, HS256),
Payload — полезная нагрузка (данные пользователя, роли и т. д.),
Signature — подпись, которая формируется с помощью секретного ключа.
Проблема возникает, если сервер не проверяет, какой алгоритм указан в заголовке. Если там стоит alg: "None"
, библиотека может интерпретировать это буквально — и не проверять подпись вовсе.
В результате злоумышленник может:
извлечь JWT токен (например, из cookies),
заменить полезную нагрузку (например, указать "role": "admin"
),
подставить alg: "None"
в заголовке,
отправить подделанный токен на сервер и получить доступ к чужому аккаунту.
Как научиться находить такие уязвимости?
Такой тип ошибки — не уникален для JWT. Это общий паттерн: разработчик полагается на библиотеку, не разбираясь в деталях. В продакшене такие недочёты дорого обходятся — и бизнесу, и карьере инженера.
Swordfish Security мы регулярно сталкиваемся с подобными уязвимостями в реальных проектах. Опыт показывает: даже базовое понимание архитектуры протоколов и моделей угроз помогает разработчикам предотвращать критичные ошибки ещё на этапе проектирования. Этот кейс, кстати, — часть одного из модулей курса по DevSecOps нашей академии, где мы разбираем типовые уязвимости и подходы к их предотвращению.