Keycloak — ключ к вашей инфраструктуре

Keycloak позволяет реализовать управление учетными записями и доступом через централизованную систему и значительно упростить процесс аутентификации в разных сервисах. Но даже в такой продуманной и удобной системе можно допускать мисконфигурации которые могут привести к критичным последствиям, ведь получив доступ к такой системе злоумышленник по сути получает доступ и ко всем взаимосвязанным сервисам.

Дата выхода: Время прочтения статьи:
Keycloak — ключ к вашей инфраструктуре

Как устроен Keycloak

Несмотря на хорошую защищенность Keycloak, существует немалый объем CVE уязвимостей применимых к прошлым версиям. Но мы разберем разновидности атак применимых даже при использовании самой последней версии.

Для начала разберемся что такое Realms в контексте Keycloak — это изолированные друг от друга среды предназначенные для разделения набора групп, пользователей, ролей и прав. При первичном развертывании Keycloak создается первичная среда — Master Realm. Это административная среда позволяющая управлять всеми остальными средами в рамках Keycloak инсталляции, поэтому крайне не рекомендуется использовать эту среду для авторизации в других приложениях инфраструктуры.

Разведка

Проверить используемую конфигурацию можно несколькими способами:

  • OpenID: /auth/realms/REALM_NAME/.well-known/openid-configuration

    f9f620c6-5e66-4546-94b1-15844500174b.png
  • SAML: /auth/realms/realm_name/protocol/saml/descriptor

    7cf89db2-1789-438f-9f25-508e20af40ad.png
  • Публичные ключи: /auth/realms/realm_name/

    d13115af-4def-46ff-aa93-38fe3d6cf3b5.png

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

    c616a3a4-9b71-4e4d-8441-437505a60ae2.jpeg

    Некоторые среды могут поддерживать возможность самостоятельной регистрации: 

    89128a82-7849-470d-9823-3b4fad0cbb95.jpeg

Но даже если опция регистрации была скрыта со страницы, можно попробовать обратиться напрямую: обратиться напрямую:

  • /auth/realms/<realm_name>/login-actions/registration?client_id=<same_as_the_login_page>&tab_id=<same_as_the_login_form>

    ceaa2313-c560-46e9-b62d-e0c24c2ae058.jpeg

Крайне не рекомендуется допускать возможность самостоятельной регистрации в продуктивной среде.

У каждой отдельной среды есть собственный набор "клиентов" (client_id) — приложений которым разрешено выполнять аутентификацию через Keycloak:

  • /auth/realms/<realm_name>/protocol/openid-connect/auth?**client_id=account-console**&redirect_uri=<...>&state=<...>&response_mode=<...>&response_type=<...>&**scope=openid**&nonce=<...>&code_challenge=<...>&code_challenge_method=<...>

    a1502d5b-02ac-43d1-a23b-564a40caa7ab.jpeg

При установке по умолчанию доступны следующие клиенты:

8be6a90d-fc00-4be5-bd7a-ef0917589960.jpeg
3435333a-1176-4697-8019-c94bd1af05f1.jpeg

 

Кроме этого, для клиентов могут существовать и отдельный набор данных (scopes) к которым запрашивается доступ при аутентификации:

  • /auth/realms/<realm_name>/protocol/openid-connect/auth?**client_id=account-console**&redirect_uri=<...>&state=<...>&response_mode=<...>&response_type=<...>&**scope=openid**&nonce=<...>&code_challenge=<...>&code_challenge_method=<...>

    624edb58-a3ec-45ab-9046-1d244b9831ee.jpeg

Стандартный набор данных которые можно запрашивать:

6d9a555d-6cb6-4dd1-b7e2-d797913933c6.jpeg

Keycloak так же поддерживает аутентификацию через делегацию провайдерам идентификации, таким как Gitlab, Google, Github и др.:

  • /auth/realms/REALM_NAME/broker/IDP_NAME/endpoint

    9f91d084-a101-4816-97e4-b980e8bd6215.jpeg

Их можно перебрать или они могут быть доступны в UI:

https://aaronparecki.com/oauth-2-simplified/#authorization

7cefdb64-5c24-49a4-81e1-0747638dc373.jpeg

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

ed7af796-ca50-4c3b-ad89-8f2cb2ef8cc2.jpeg
9f494bcd-e430-4c06-aabe-532b2255584a.jpeg

В результате этапа разведки мы можем получить уже немалый объем полезной информации:

  • Доступные среды (realms)
  • Доступные среды с саморегистрацией
  • Список клиентов для каждой среды (client_id)
  • Список доступных данных для запроса (scope)
  • Email адреса существующих пользователей для среды где удалось получить аккаунт
  • Список используемых дополнительных провайдеров для аутентификации

Брутфорс атаки

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

Препятствием может стать защита от CSRF, поэтому для брутфорс атак на Keycloak потребуется реализация скрипта или использование набора настроек в Burp Suite.

Реальные случаи взлома

В результате анализа доступных на периметре Keycloak нашим специалистам в прошлом удавалось получить доступ к административным средам и захватить полностью контроль над системой аутентификации, что открывает огромные возможности для дальнейшего закрепления в инфраструктуре:

2d312e58-b783-4ad9-97ba-6f67cf5d3611.png

 

Заключение

Несмотря на хорошую защищенность Keycloak, даже при стандартной конфигурации появляются высокие риски для инфраструктуры, поэтому крайне рекомендуем проверять и применять все рекомендации на основе официальной документации:

https://www.keycloak.org/docs/latest/server_admin/#mitigating_security_threats

Метаскан позволяет эффективно выявить все доступные управляющие среды Keycloak (Master Realm) на периметре, а наши пентестеры могут помочь вам выявить слабые учетные записи и защитить используемые на периметре Keycloak.

Keycloak — ключ к вашей инфраструктуре | METASCAN