FixVibe
Covered by FixVibehigh

Безпека JWT: ризики незахищених токенів і відсутності перевірки претензій

Веб-токени JSON (JWT) забезпечують стандарт для передачі претензій, але безпека залежить від суворої перевірки. Неможливість перевірити підписи, час закінчення терміну дії або цільову аудиторію дозволяє зловмисникам обійти автентифікацію або відтворити маркери.

CWE-347CWE-287CWE-613

Вплив нападника

Неправильна перевірка 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 (ID JWT), щоб призначити унікальний ідентифікатор кожному маркеру, дозволяючи серверу відстежувати та відхиляти повторно використані маркери [S1].

Стратегія виявлення

Уразливості в обробці JWT можна виявити, проаналізувавши структуру маркера та поведінку відповіді сервера:

  • Перевірка заголовка: перевірка заголовка alg (алгоритм), щоб переконатися, що для нього не встановлено значення "none" і використовуються очікувані криптографічні стандарти [S1].
  • Перевірка претензій: підтвердження наявності та дійсності претензій exp (термін дії) і aud (аудиторія) у корисному навантаженні JSON [S1].
  • Перевірка перевірки: перевірка того, чи правильно сервер відхиляє токени, термін дії яких минув відповідно до заяви exp або призначені для іншої аудиторії, як визначено заявою aud [S1].