LDAP уязвимость: что это такое и методы защиты

28 апреля 2021

Введение.

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

Данная статья объяснит принцип LDAP уязвимости и покажет как от неё защититься для повышения безопасности вашего веб-приложения.




Что такое LDAP?

Lightweight Directory Access Protocol (LDAP) - это протокол открытого приложения для доступа и обслуживания служб каталогов в IP сети.

Обычно организации хранят информацию пользователей и ресурсов в центральном протоколе (например, в Active Directory), и затем приложения могут получить доступ и взаимодействовать с этой информацией через инструкции LDAP.

Фактически, сервера LDAP представляют собой врата к объёмному количеству конфиденциальной информации, включая реквизиты пользователя, имена сотрудников и их роли, устройства общих сетевых ресурсов и так далее




Что такое LDAP уязвимость? (инъекция)

Атаки с использованием LDAP уязвимости эксплуатируют уязвимости проверки ввода для внедрения и запуска запросов на LDAP серверов.

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

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




Пример эксплуатация LDAP уязвимости.

Если веб-приложение использует LDAP для проверки полномочий пользователя во время процесса логина и он уязвим к LDAP уязвимости, то можно обойти аутентификацию с помощью ввода вечно истинного запроса LDAP (подобного SQL и XPATH уязвимостям).

Подобный вечно истинный запрос в SQL - select * from users where 1=1


Допустим, веб-приложение использует фильтр для сопоставления пары логин/пароль LDAP:

  • searchlogin= “(&(uid=”+user+“)(userPassword={MD5}”+base64(pack(“H*”,md5(pass)))+“))”;
  • С помощью данных значений:

  • user=*)(uid=*))(|(uid=*
  • pass=password
  • фильтр поиска приведёт к:

  • searchlogin=“(&(uid=*)(uid=*))(|(uid=*)(userPassword={MD5}X03MO1qnZdYdgyfeuILPmQ==))”;
  • что правильно и всегда корректно. Тем самым, нарушитель получит авторизованный статус в качестве первого пользователя на древе LDAP.




    Blind LDAP уязвимость. Что это и методы.

    Для прямого запроса к серверу LDAP, нарушителю необходимо знать (или угадать) имена атрибутов для их спецификации в фильтре. Blind LDAP уязвимость является более продвинутой техникой использования уязвимости для извлечения неизвестной информации путём отправки множества запросов и проверки ответов сервера на предмет достоверности запроса.

    Совместно с дополнительными оптимизацией и автоматизацией это позволяет нарушителю получить данные с помощью булевых ответов. На простом языке с помощью вопросов "да/нет". Истинное условие значит true (да), а ложное условие - false (нет)


    Эффективные атаки с использованием Blind уязвимости обычно работают в несколько этапов:

  • Обнаружение атрибутов: злоумышленники могут запросить множество возможных атрибутов и отслеживать ответ сервера. Если атрибут существует, то сервер ответит положительно.
  • Булеанизация: Как только имя атрибута становится известным, злоумышленник может отправить серию запросов, содержащие подстановочные знаки и/или операторы сравнения для определения конкретных значений атрибута. Повторюсь, лишь два ответа сервера будут рассматриваться, из-за чего булеанизация — это преобразование процесса в серию истинных/ложных тестов.
  • Сокращение набора символов: Для снижения числа запросов нарушители могут воспользоваться несколькими постановочными знаками для нахождения символов, которые присутствуют в любом месте целевого значения.



  • Что может злоумышленник благодаря LDAP уязвимости.

    Рассмотрим несколько примеров того, что злоумышленник может провернуть с помощью LDAP уязвимости.

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



  • Защита от LDAP уязвимости.

    Как же можно защититься от LDAP уязвимости? Благодаря недостаточно защищенным интерфейсам LDAP и широкому использованию LDAP для аутентификации пользователей в систему атаки с использованием данной уязвимости становятся возможными. От них можно защититься с помощью данных опций.

  • Применение правильной функции кодировки LDAP для обхода всех переменных.
  • Использование фреймворка, которая автоматически защищает от LDAP уязвимости
  • Минимизация привилегий для привязанного аккаунта LDAP в вашей среде



  • Итоги.

    Как вы могли понять, LDAP уязвимость очень актуальна в наше время.

    В качестве примера можно выделить найденную 4 Февраля 2021 года Java LDAP уязвимость на GitHub, за обнаружение которой энтузиаст получил $1800.