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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-18963-PoC — Доказательство концепции и средство проверки уязвимости для CVE-2026-18963 — неаутентифицированного захвата учётной записи в потоке сброса учётных данных Keycloak. Однофайловый Python, опциональный браузерный компонент Playwright. | Kitploit
Инструменты/GitHubGitHub/orevim/cve-2026-18963-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеАутентификация
GitHuborevim/cve-2026-18963-poc

CVE-2026-18963-PoC

Доказательство концепции и средство проверки уязвимости для CVE-2026-18963 — неаутентифицированного захвата учётной записи в потоке сброса учётных данных Keycloak. Однофайловый Python, опциональный браузерный компонент Playwright.

Репозиторий
17 дней назадЕщё не проверено
Сайт

Популярное

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

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

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

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

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

CVE-2026-18963

Доказательство концепции и средство проверки уязвимости для обхода потока сброса учётных данных в Keycloak, с опциональным браузерным компонентом, который отображает результирующее состояние в реальном окне Chrome.

Инструмент представляет собой один файл, cve_2026_18963_poc.py, написанный на стандартной библиотеке Python. Playwright — единственная сторонняя зависимость, и он импортируется лениво, поэтому HTTP-часть работает на стандартном интерпретаторе без установки чего-либо.

cve_2026_18963_poc.py     1009 lines, Python 3.10 or newer

Благодарность. CVE-2026-18963 была сообщена Red Hat Джеймсом Паремайном, который упомянут в рекомендациях вендора. Orevim не обнаружил и не сообщил об этой уязвимости. Этот репозиторий представляет собой независимое доказательство концепции, написанное на основе опубликованных рекомендаций.


1. Уязвимость

CVE-2026-18963 — это обход аутентификации в процессе восстановления пароля Keycloak. Это два дефекта, действующих совместно.

Заметка без области действия. Когда пользователь открывает экран выбора аутентификатора, Keycloak записывает заметку AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED в сессию аутентификации. Заметка представляет собой простой логический флаг. Она фиксирует, что какой-то экран выбора был отображён, а не какое выполнение его отобразило. Заметка переживает выполнение, которое её установило.

Незащищённый обработчик. ResetCredentialEmail.action() устанавливает emailVerified для разрешённого пользователя и вызывает success() без проверки токена действия, который должен нести отправленный по электронной почте ссылке. Метод предполагает, что до него можно добраться только по этой ссылке.

В цепочке неаутентифицированный вызывающий устанавливает заметку для выполнения ввода имени пользователя, продвигает поток так, чтобы выполнение электронной почты стало текущим, а затем повторно входит по URL сброса. Устаревшая заметка заставляет экран выбора отображаться привязанным к выполнению электронной почты. Отправка пустого тела в loginAction этого выполнения напрямую вызывает незащищённый обработчик. Поток переходит к обязательному действию UPDATE_PASSWORD без какого-либо чтения электронной почты.

ИдентификаторCVE-2026-18963, GHSA-4gv3-mc9p-5wqc
КлассCWE-640, слабый механизм восстановления пароля для забытого пароля
CVSS v3.19.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Затронуто>= 26.0.0, < 26.4.15, >= 26.5.0, < 26.6.6, >= 26.7.0, < 26.7.2
Исправлено в26.4.15, 26.6.6, 26.7.2. Ветка 26.8.0 поставляется с исправлением
Пакетorg.keycloak:keycloak-services (Maven)
Опубликовано18 августа 2026 г.
СообщеноДжеймсом Паремайном, упомянут в рекомендациях Red Hat

Единственное предварительное условие — realm предлагает восстановление пароля неаутентифицированным пользователям. Ни учётные данные, ни токен, ни предыдущая сессия не требуются.

Цепочка запросов

Восемь запросов по порядку. Теги соответствуют меткам шагов, которые выводит инструмент, и именам файлов, которые он записывает в --out.

#ТегМетодЧто делает
1loginGETURL авторизации. Устанавливает сессию аутентификации и выдаёт ссылку сброса.
2resetGETСтраница сброса учётных данных. Содержит форму имени пользователя.
3tryanotherPOSTtryAnotherWay=on. Записывает заметку без области действия.
4usernamePOSTИдентификатор. Продвигает поток так, чтобы выполнение электронной почты стало текущим. Отправляет письмо для восстановления, если идентификатор разрешается.
5reenterGETСнова URL сброса. Устаревшая заметка отображает селектор, привязанный к выполнению электронной почты.
6actionPOSTПустое тело в loginAction этого выполнения. Вызывает незащищённый обработчик.
7required-actionGETПереходит по Location на страницу UPDATE_PASSWORD.
8setpasswordPOSTНовый пароль. Отправляется только с --set-password.

Шаг 6 — это эксплойт, и пустое тело имеет решающее значение. Отправка authenticationExecution=<id> вместо этого является обычным взаимодействием с селектором: оно переключает выполнение и повторно отправляет письмо для восстановления, что никогда не достигает дефекта. Пустой POST не отвечает ни на какой вызов, поэтому Keycloak вызывает обработчик для того выполнения, которое устаревшая заметка оставила текущим.


2. Часть первая: HTTP-цепочка

Режимы

# Decide whether the instance is affected. Changes nothing, sends no mail.
./cve_2026_18963_poc.py --url https://sso.example.com --realm demo \
    --client-id account-console --check

# Additionally report which identifiers resolve to a real account.
# Resolving accounts receive a recovery email. See the note below.
./cve_2026_18963_poc.py --url https://sso.example.com --realm demo \
    --client-id account-console --check --users-file names.txt --rate 0.25

# Reach the set-password form for one account and stop there.
./cve_2026_18963_poc.py --url https://sso.example.com --realm demo \
    --client-id account-console --username [email protected]

# Complete the takeover. This locks the account holder out.
./cve_2026_18963_poc.py --url https://sso.example.com --realm demo \
    --client-id account-console --username [email protected] \
    --set-password 'N3w-passw0rd!'

--check выполняет проверку со случайным идентификатором вида <16 hex>@<8 hex>.invalid. Домен .invalid зарезервирован RFC 2606 и не может быть разрешён, поэтому проверка не может совпасть с реальной учётной записью и не может привести к отправке почты. Она устанавливает статус сборки, никого не затрагивая.

Добавление --users меняет это. Шаг 4 — это обычная отправка формы восстановления пароля. В realm с настроенным SMTP идентификатор, который разрешается в пользователя с адресом электронной почты, получает настоящее письмо для восстановления пароля — как на уязвимых, так и на исправленных сборках. Простая проверка этого не делает, потому что ResetCredentialEmail.authenticate() ничего не отправляет, когда пользователь равен null. Рассматривайте --check --users как процесс, который уведомляет реальных людей, и подтвердите, что он входит в ваши полномочия, прежде чем запускать его.

Вердикты

Инструмент классифицирует по ответу на шаг 6 — пустой POST.

ОтветРезультатЗначение
400account-absentОбработчик выполнился без токена действия и не разрешил ни одного пользователя. Сборка уязвима.
302 с Locationform-reachedОбработчик выполнился, и учётная запись разрешается. Уязвима, и этот идентификатор реальный.
Что-либо иноеnot-vulnerableПустой POST не продвинулся.
Нет селектора на шаге 5not-vulnerableУстаревшая заметка не была учтена.
302 после шага 8password-setПароль изменён, и realm выдал сессию.
429 после исчерпания бюджета повторовrate-limitedВердикта нет. Запуск остановлен.
Отрицательный результат, полученный после любого троттлингаinconclusiveСм. ниже.

400 — самый важный. Он отделяет сборка уязвима от эта учётная запись существует, что позволяет --check установить наличие уязвимости на экземпляре, не перечисляя ни одного реального пользователя. Разрешение идентификаторов — тогда отдельный вопрос, требующий явного согласия.

Скачать инструмент