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

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

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

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

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

Категории

Все категории
Loading categories
keycloak-saml-redirect-param-split — PoC с использованием loopback для уязвимости SAML-брокера в Keycloak 26.8.1: процентно-кодированное дублированное имя SAMLResponse обходит проверку подписи при перенаправлении, позволяя войти в систему как другой пользователь. | Kitploit
Инструменты/GitHubGitHub/abraxas/keycloak-saml-redirect-param-split
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийУправление идентификацией и доступом (IAM)АутентификацияЛаборатории и Практика
GitHubabraxas/keycloak-saml-redirect-param-split

keycloak-saml-redirect-param-split

PoC с использованием loopback для уязвимости SAML-брокера в Keycloak 26.8.1: процентно-кодированное дублированное имя SAMLResponse обходит проверку подписи при перенаправлении, позволяя войти в систему как другой пользователь.

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

Популярное

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

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

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

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

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

Abraxas Labs - keycloak-saml-redirect-param-split

keycloak-saml-redirect-param-split

Тот, у кого нет учётной записи Keycloak, может завершить корпоративный вход через SAML как другой человек. Он один раз входит у вышестоящего поставщика идентификации, сохраняет этот подписанный редирект и подставляет перед ним второй SAML-документ под именем в процентном кодировании. Keycloak проверяет подлинную подпись и затем выполняет вход под именем из поддельного документа. Для этого нужен SAML-брокер, подписывающий ответы HTTP-Redirect, с включённой проверкой подписи и отключёнными подписями утверждений, что и настраивается при импорте метаданных. Это не разделение по точке с запятой из issue #53354.

Класс: OAuth leftover Доступ: Удалённый (без аутентификации в Keycloak; нужен SAML-брокер, подписывающий редиректы)

Keycloak 26.8.1 (24ed1dad) - Red Hat

IDCVE пока нет
КлассOAuth leftover
ДоступУдалённый (без учётной записи Keycloak; нужна одна подлинная подпись HTTP-Redirect от IdP)
CWECWE-287 / CWE-347 / CWE-116
CVSSВысокий: 7.4 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
ПродуктKeycloak
Затронуто26.8.1 (24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b); Quarkus 3.40.1; образ quay.io/keycloak/keycloak:26.8.1
Аутентификацияотсутствует в Keycloak. Нужен брокер поставщика идентификации SAML с validateSignature=true и отсутствующим или ложным wantAssertionsSigned.
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:18084

Что может сделать злоумышленник

Нужен NameID жертвы (обычно email) и один настоящий подписанный HTTP-Redirect от этого IdP. Пароль Keycloak не нужен. Почтовый ящик не нужен. IdP только с POST не выдаёт эту подпись. ACS по GET остаётся смонтированным, даже когда импорт метаданных предпочитает POST.

ПривилегияМетод / точка входаРазведка / целостность / доступностьДоказано в лаборатории или выведено
Привязать поддельный SAML-документ, пока подлинная подпись всё ещё проверяетсяGET broker ACS с SAML%52esponse=<forged> перед подписанным SAMLResponseЦелостность (аутентификация)Доказано в лаборатории. Контрольный email [email protected]. Атакующий email [email protected]
Создать пользователя-жертву через first-broker-logincallback.authenticated по поддельному NameIDЦелостность (создание учётной записи)Доказано в лаборатории. Число жертв 0 до разделённого запроса, 1 после
Сессия как существующий брокерский пользователь, включая администратора, использующего тот же IdPТот же ACS, NameID этого пользователяЦелостность (захват учётной записи)Выведено. Лаборатория создала жертву при первом входе
Сохранить RelayState и сессию аутентификацииRelayState остаётся подписанным значениемЦелостностьИсходный код. Подпись покрывает RelayState
Негативный контрольПодлинный подписанный редирект без лишнего параметран/дДоказано в лаборатории. Контроль завершается под email атакующего

Остаётся закрытым в этом leftover

ОсьМетод / точка входаПочему закрыто
ЦелостностьРазделение по точке с запятой SAMLResponse=...;SAMLResponse=...issue #53354. quarkus.http.use-semicolon-as-query-param-delimiter=false
ЦелостностьНеподписанное утверждение при wantAssertionsSigned=truehandleLoginResponse тогда требует подпись утверждения
ЦелостностьНет SAML-брокера или IdP только с POST без подписи редиректаЗлоумышленник никогда не получает SigAlg + Signature при GET
ЦелостностьRCE на хосте, Admin REST без аутентификацииВне класса
ЦелостностьФорма имени по умолчанию VERIFY_PROFILEДоказано в лаборатории как шаг завершения, а не опровержение. Форма уже содержит брокерский email

Как я это нашёл

Я зафиксировал Keycloak 26.8.1. RESTEasy Reactive берёт @QueryParam("SAMLResponse") из Vert.x, который выполняет percent-декодирование имён параметров запроса, поэтому SAML%52esponse схлопывается в SAMLResponse, и побеждает первое значение. verifyRedirectSignature пересобирает подписанную строку из getQueryParameters(false) по исходному запросу, где это имя остаётся другим ключом.

Уже зафиксированные ошибочные пути: трактовка #53354 как этого остатка (percent-кодированное имя, а не точка с запятой); следование за 302-ответами ACS в лабораторном клиенте и отбрасывание AUTH_SESSION_ID; восприятие пустых firstName/lastName при VERIFY_PROFILE как промаха (email уже является brokered NameID); reverse shell. Театр.

Лаборатория

Python 3.11+ с cryptography. Требуется Docker.

python3 keycloak-saml-redirect-param-split-Abraxas-Labs.py

или:

cd lab
./run.sh

Цель — только http://127.0.0.1:18084. Образ quay.io/keycloak/keycloak:26.8.1. Лаунчер выполняет chdir в lab/ и запускает run.sh. Лабораторный IdP работает в том же процессе. Он никогда не обращается к реальному провайдеру идентификации.

IOC image=quay.io/keycloak/keycloak:26.8.1 label-version=26.8.1
IOC serverinfo-version=26.8.1
IOC validate-signature=true want-assertions-signed=absent
IOC review-profile=DISABLED
IOC [email protected]
IOC victim-before=0
IOC [email protected]
IOC victim-after=1
SUCCESS KC-H04-SAML-REDIRECT kcs04b8n1

Исправление

Проверяйте тот же документ запроса, который разбирает эндпоинт. Выполняйте процентное декодирование имён параметров перед восстановлением подписи или отклоняйте запрос, содержащий после декодирования более одного SAMLResponse. Включите wantAssertionsSigned для редирект-брокеров, включая путь импорта метаданных.

Ссылки

  • github.com/keycloak/keycloak тег 26.8.1 (24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b)
  • SAMLEndpoint.redirectBinding (SAMLEndpoint.java:182-183, :779-813, :896-914)
  • SamlProtocolUtils.verifyRedirectSignature (SamlProtocolUtils.java:216-249)
  • KeycloakUriInfo.getQueryParameters (KeycloakUriInfo.java:147-163)
  • Рядом (не этот путь): issue #53354 разделение по точке с запятой
  • CWE-287 · CWE-347 · CWE-116

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лаборатории на loopback. Без гарантий.

Abraxas Labs [email protected]

Пожалуйста, указывайте авторство CVE за Abraxas Labs.

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