Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/jedisct1/cve-2025-65945-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийКриптографияТестирование на ПроникновениеАутентификация
GitHubjedisct1/cve-2025-65945-poc

CVE-2025-65945-poc

PoC для CVE-2025-65945 (Некорректная проверка криптографической подписи в node-jws)

Репозиторий
518 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2025-65945: обход проверки подписи node-jws

Это доказательство концепции обхода проверки подписи в библиотеке node-jws. Уязвимость позволяет злоумышленникам подделывать валидные JWT, когда сервер получает HMAC-секреты из данных, контролируемых пользователем.

В чём ошибка?

Функция jws.createVerify() не проверяет, что при использовании HMAC-алгоритмов секрет действительно был предоставлен. Если ваше приложение ищет секреты на основе чего-то в JWT (например, заголовка kid) и поиск не даёт результата, вы можете начать проверять подпись с пустым секретом.

Злоумышленник может воспользоваться этим следующим образом:

  1. Отправка JWT с поддельным идентификатором ключа, которого нет в вашей базе данных
  2. Подпись вредоносной полезной нагрузки пустой строкой в качестве секрета
  3. Поиск на вашем сервере возвращает undefined, который приводится к пустой строке
  4. Теперь обе стороны «согласны» с «секретом» (пустой строкой), поэтому подпись проходит проверку

Теперь злоумышленник может выдать себя за любого пользователя или наделить себя правами администратора.

Затронутые версии

  • jws 3.2.2 и более ранние
  • jws 4.0.0

Чтобы исправить проблему, обновитесь до 3.2.3+ или 4.0.1+.

Запуск PoC

Убедитесь, что у вас установлен Bun, затем:

root@kitploit:~
# Install the vulnerable version
bun install [email protected]

# Run the exploit
bun run exploit.js

Вы должны увидеть вывод, в котором подделанный токен администратора принимается как валидный.

Что делает эксплойт?

PoC имитирует сервер, который:

  • Имеет хранилище секретов с парой API-ключей
  • Ищет секреты на основе заголовка kid (идентификатор ключа) JWT
  • Использует createVerify() с потоковым API

Злоумышленник создаёт JWT с kid: "non-existent-key" и подписывает его пустым секретом. Когда сервер пытается найти этот ключ, он получает undefined, записывает пустую строку в поток проверки, и подделанный токен успешно проходит проверку.

Проверка исправления

root@kitploit:~
# Upgrade to patched version
bun install [email protected]

# Run again - should fail now
bun run exploit.js

В исправленной версии вы увидите ошибку: secret must be a string or buffer or a KeyObject. Исправление проверяет, что для HMAC-операций имеется корректный секрет, прежде чем продолжить.

Уязвимый шаблон кода

Если ваш код выглядит похоже на этот, вы можете быть затронуты уязвимостью:

root@kitploit:~
const decoded = jws.decode(token);
const secret = lookupSecret(decoded.header.kid); // might return undefined!

const verifier = jws.createVerify({
  algorithm: "HS256",
  signature: token,
});

verifier.secret.write(secret); // oops
verifier.secret.end();

Ссылки

  • GitHub Advisory
  • Коммит с исправлением
Скачать инструмент