Вплив нападника
Неправильна перевірка 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].
