Эксплуатация JWT: Практический разбор CTF-задачи

Qwerty Pirogov

New member
05.10.2024
1
1

Phoenix_10_A_striking_cinematic_header_image_for_a_CTF_writeup_1 (1).webp

1. CTF-контекст и real-world релевантность.

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

CTF-контекст: Задачи на JWT проверяют понимание криптографии, кодирования Base64URL и логики валидации на стороне сервера.

Реальная релевантность: Эти уязвимости напрямую связаны с категорией A07:2021 – Identification and Authentication Failures (Недостатки идентификации и аутентификации) в OWASP Top 10. Успешная эксплуатация JWT в реальном мире может привести к захвату сессий, краже данных и несанкционированному доступу к административным функциям.

2. Разведка: Анализ JWT токена.

Первый шаг в любой атаке это Reconnaissance (разведка). Нам нужно получить токен и понять его структуру и алгоритмы. Задачу решаю на платформе HackerLab (Жесткий Type).

Захожу на выделенный хост. Прохожу регистрацию, выпадает роль user, на удачу копирую флаг :D, вставляю в проверку, не подходит. Хм..

1764686996125.webp


1764687036558.webp


В таргете Burp Suite чекаю вкладки, нахожу токен для нового пользователя.

1764687112236.webp


Перехваченный токен состоит из трёх частей, разделённых точками (.): Header, Payload и Signature.

Пример перехваченного токена:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InF3ZSIsInJvbGUiOiJ1c2VyIiwiZXhwIjoxNzY0Njg4ODE3fQ.GU_897KC83_9YHOvUZvGm_JSkm47dwsl3MqdbHjUpEk

Иду на сайт , декодирую JSON.

1764687200408.webp


Ключевая цель: Мы идентифицируем клейм, который контролирует привилегии (здесь это "role": "user").

Параметр alg (HS256) указывает на использование симметричного ключа.​

Поиск public endpoints для токенов​

В процессе разведки ищем все точки входа (endpoints), которые могут дать нам больше информации:​
  • /login – для получения новых токенов.​
  • /api/v1/profile – для тестирования валидности токена.​
/api/v1/jwks – если используется асимметричный алгоритм (RS256), этот endpoint может раскрыть публичный ключ (JSON Web Key Set), который затем можно использовать в атаке Algorithm Confusion.​

3. Векторы атаки на JWT​

Выбор вектора атаки зависит от результатов разведки.​

None algorithm bypass

Наиболее эффективная, если сервер не принудительно проверяет подпись. Мы заставляем сервер принять токен без подписи, просто изменив заголовок.​
  1. Изменить Header: "alg": "None".​
  2. Изменить Payload: "role": "admin".​
  3. Удалить Signature (третью часть токена).​

Weak secret bruteforce (wordlist attack)

Актуально при использовании HS256 и слабом ключе.​
  • Процесс: Используем jwt_tool в связке со словарями (например, rockyou.txt) для перебора возможных секретных ключей.​
  • Задача: Найти ключ, который при подписи нашего Header.Payload (с ролью admin) даёт валидную подпись.​

Algorithm confusion (RS256 - HS256)

Атака на реализацию, которая динамически обрабатывает alg.​
  1. Получаем Public Key сервера (например, с /jwks).​
  2. Меняем alg в Header на HS256.​
  3. Подписываем наш токен с привилегиями администратора, используя Public Key как Secret Key для алгоритма HS256.​
Уязвимый сервер, видя HS256, использует Public Key (который, по его мнению, является Secret Key) для проверки, и подпись оказывается валидной.​

4. Эксплуатация: Получение admin-токена.​

Продемонстрирую пошаговый процесс на примере.

Инструмент: Burp Suite.​
  1. Модификация Payload (Цель: admin):

    Мы берём оригинальный Payload, декодируем его, меняем "role": "user" на "role": "admin", и перекодируем обратно в Base64URL.

    1764687461173.webp
    Делаю это в декодере Burp Suite.
  2. Перехожу в Repeater, вставляю payload с "role": "admin"
  3. Нажимаю Send и получаю ответ 200, а это значит, сервер принял данные:

    1764687886916.webp

  4. Поздравляю, мы пришли к цели!

    photo_2025-12-02_23-13-18.webp

5. Защита в production.​

Предотвращение описанных атак требует строгой реализации и соблюдения лучших практик.​

Secure JWT checklist (OWASP recommendations)​

Нарушение
Рекомендация OWASP
Динамическое чтение alg
Алгоритм Whitelist: Всегда используйте строгий белый список разрешённых алгоритмов (например, только HS256). Блокируйте alg:None.
Слабый ключ
Strong Secrets: Используйте криптографически стойкие, длинные (минимум 256 бит) и уникальные секретные ключи.
Бесконечный срок жизни
Короткий TTL: Устанавливайте минимальное время жизни токена (exp claim), например, 5-15 минут, для снижения риска захвата сессии.
Игнорирование клеймов
Validate All Claims: Проверяйте все стандартные (iss, exp) и авторизационные (role) клеймы.

Code review tips для ревьюверов​

  1. Проверьте используемую JWT-библиотеку на наличие известных уязвимостей.​
  2. Убедитесь, что код не содержит флагов типа verify=false или логики, которая разрешает токену быть неподписанным.​
  3. Особое внимание уделите функции, отвечающей за верификацию: она должна явно указывать ожидаемый алгоритм, а не брать его из токена.​

Runtime detection правила для WAF/SIEM​

  • WAF Rule: Блокируйте любые входящие JWT, в которых Base64URL-декодированный Header содержит строку "alg":"None" или другие подозрительные алгоритмы, не входящие в белый список.​
  • SIEM Rule: Настройте мониторинг на аномально частые ошибки аутентификации или невалидные токены от одного и того же IP-адреса, что может указывать на активный брутфорс секретного ключа (Weak secret bruteforce)​

    6. Дополнительные материалы и CTF-площадки для практики.​

    Для закрепления навыков:

    HackerLab.Pro: Проект Codeby
    OWASP JWT Cheat SheetPortSwigger
    Web Security Academy: Раздел "JWT Attacks" содержит интерактивные лабораторные работы.
    Hack The Box / TryHackMe: Практические машины с уязвимостями JWT.


    Использование этих инструментов и знаний позволит вам успешно решать CTF-задачи и, что более важно, применять эти знания для защиты реальных приложений.
 

Вложения

  • 1764670695428.webp
    1764670695428.webp
    10,3 КБ · Просмотры: 14
  • 1764671784827.webp
    1764671784827.webp
    11,2 КБ · Просмотры: 12
  • 1764686954441.webp
    1764686954441.webp
    4,6 КБ · Просмотры: 12
  • 1764687093883.webp
    1764687093883.webp
    31,2 КБ · Просмотры: 13
Последнее редактирование:
  • Нравится
Реакции: Edmon Dantes
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы