
Proof-of-concept, демонстрирующий путаницу алгоритмов JWT в библиотеке fast-jwt. Включает уязвимый сервер, скрипт подделки токена и исправление проверки для обучения безопасности.
Этот репозиторий демонстрирует смешение алгоритмов JWT в fast-jwt, когда при проверке токена не фиксируется список разрешённых алгоритмов.
Выполните из корня проекта:
npm install
Приложение ожидает следующие файлы:
keys/private.pemkeys/public.pemВыполните один из следующих наборов команд.
PowerShell (Windows):
New-Item -ItemType Directory -Path keys -Force | Out-Null
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem
Linux/macOS/Git Bash:
mkdir -p keys
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem
node server.js
Ожидаемый вывод:
Server running at http://localhost:3000
curl http://localhost:3000/generateToken
node sign.js
Скопируйте выведенный токен.
node checkAdmin.js <JWT_TOKEN>
Если атака успешна, ответ будет содержать Welcome Admin!.
В server.js верификатор не ограничивает алгоритмы:
const verifySync = createVerifier({
key: publicKey,
});
Без разрешённого списка алгоритмов сервер может принять вредоносный HS256-токен, подписанный с использованием публичного ключа в качестве HMAC-секрета.
В демонстрациях CVE группы объектом уязвимости является библиотека (она не может работать автономно). Поэтому необходимо имитирующее приложение, которое показывает, как реальная система вызывает API этой библиотеки. В данном репозитории файл server.js — это имитирующий слой приложения.
Вспомогательный сценарий кода PoC:
Короче говоря, группа не переписывала функции библиотеки. Внутри имитирующего приложения использовались только оригинальные API уязвимой библиотеки (createSigner, createVerifier), чтобы точно воспроизвести контекст эксплуатации.
Ограничьте проверку алгоритмом RS256:
const verifySync = createVerifier({
key: publicKey,
algorithms: ["RS256"],
});
Этот проект предназначен исключительно для изучения безопасности в контролируемой лабораторной среде.