LDAP-инъекция
LDAP-инъекция — это вектор Атаки на Веб-приложения, при котором злоумышленник внедряет вредоносные символы в параметры запросов к LDAP-серверу (Lightweight Directory Access Protocol). В контексте Веб-разработки и информационной безопасности уязвимость возникает, когда Приложение конструирует Фильтры поиска или проверки подлинности путем прямой подстановки пользовательского ввода без должной санитизации. Эта атака позволяет обойти механизмы авторизации, получить Несанкционированный доступ к конфиденциальным данным каталога или модифицировать записи пользователей.
Главное
- Атака эксплуатирует недостаточную фильтрацию спецсимволов в полях ввода, таких как Логин или поисковая строка.
- Цель злоумышленника — изменение логики LDAP-фильтра для обхода пароля или извлечения всех записей каталога.
- Уязвимость критична для систем SSO, корпоративных справочников (Active Directory) и CRM с интеграцией LDAP.
- Защита требует экранирования специальных символов и использования параметризованных методов построения запросов.
Как работает LDAP-инъекция
Механизм Атаки основан на манипуляции синтаксисом LDAP-фильтров, которые строятся динамически на основе данных от пользователя. Если Разработчик не применяет санитизацию, злоумышленник может внедрить операторы логического И (&), ИЛИ (|) и НЕ (!), а также символы скобок и звездочки (*). Например, стандартный Фильтр вида (uid=USER) при подстановке вредоносного значения *)(uid=*))(|(uid=* превращается в выражение, которое возвращает все объекты каталога, игнорируя проверку пароля. Этот трюк часто используется в формах входа, где система проверяет существование пользователя по логину.
Кроме того, атака может использовать null-байты (\0) для обрезания части строки запроса, что позволяет игнорировать последующие условия безопасности, добавленные разработчиком. Процесс эксплуатации обычно делится на два этапа: сначала исследователь отправляет тестовые символы для определения наличия уязвимости по изменению времени ответа или кодов ошибок, а затем формирует полноценный эксплойт для эскалации привилегий или кражи чувствительных атрибутов, таких как хэши паролей или списки групп доступа.
Зачем нужен LDAP-инъекция
Вредоносное использование данной техники необходимо злоумышленникам для получения полного контроля над учетными записями и данными корпоративного каталога. Обход аутентификации является наиболее частой целью: внедрив условие, которое всегда истинно, атакующий получает доступ к системе без знания реальных учетных данных. Это особенно опасно в системах единого входа (SSO), где компрометация одной учетной записи может привести к доступу ко всем связанным ресурсам компании.
Помимо обхода защиты, техника применяется для разведки и сбора информации. Атакующие используют уязвимость для извлечения конфиденциальных атрибутов сотрудников, включая email-адреса, номера телефонов и внутренние IP-адреса. Эти данные затем используются для целевого фишинга (spear-phishing) или социальной инженерии. В сфере интернет-маркетинга такие утечки критичны для B2B-платформ и личных кабинетов клиентов, так как ведут к потере доверия партнеров и репутационным рискам.
Классификация атак зависит от цели внедрения и способа получения результата. Первый тип — обход аутентификации, при котором Фильтр проверки логина и пароля модифицируется так, чтобы запрос возвращал положительный результат без действительных учётных данных. Второй тип — инъекция в поисковые Фильтры, которая применяется к полям поиска сотрудников или устройств, позволяя извлечь полный Список всех записей в каталоге независимо от прав доступа.
Третий важный вид — слепая LDAP-инъекция. В этом случае атакующий не видит результаты запроса напрямую в интерфейсе приложения, но определяет истинность условий по косвенным признакам, таким как Время отклика сервера или специфические коды ошибок. Также выделяют инъекцию в DN (distinguished name), которая направлена на изменение целевой записи для её удаления или модификации атрибутов, что может привести к нарушению работы сервисов или созданию бэкдоров.
Где используется LDAP-инъекция
Уязвимость встречается в Веб-приложениях, которые интегрированы с корпоративными каталогами, такими как Microsoft Active Directory, OpenLDAP или FreeIPA. Она актуальна для систем управления идентификацией, порталов самообслуживания сотрудников и CRM-систем, использующих LDAP для синхронизации учётных записей. В маркетинговой инфраструктуре риск высок для B2B-порталов, где доступ к клиентской базе ограничен через LDAP-группы, а также для рекламных кабинетов, использующих корпоративные учётные записи для авторизации.
Любая Точка входа, где пользовательский ввод передается в запрос к каталогу без экранирования, представляет угрозу. Это включает формы регистрации, функции восстановления пароля, модули поиска внутри административных панелей и API-интерфейсы для синхронизации данных между различными системами предприятия. Разработчикам необходимо проверять все входные данные, особенно если они используются для формирования сложных поисковых запросов.
Для понимания принципа работы рассмотрим пример уязвимого кода на Python, который конструирует LDAP-запрос путем Простой конкатенации строк. В безопасном коде следует использовать методы библиотеки, обеспечивающие автоматическое экранирование специальных символов.
# Уязвимый код: прямая подстановка ввода пользователя
def search_user_vulnerable(username):
# Злоумышленник может передать *)*(|(password=*)
filter_string = "(uid=" + username + ")"
results = ldap_connection.search_s(base_dn, ldap.SCOPE_SUBTREE, filter_string)
return results
# Безопасный код: использование параметризованного запроса
def search_user_safe(username):
# Библиотека автоматически экранирует спецсимволы
filter_string = "(&(objectClass=person)(uid=%s))" % ldap.dn.escape_dn_chars(username)
results = ldap_connection.search_s(base_dn, ldap.SCOPE_SUBTREE, filter_string)
return results
Никогда не используйте простую конкатенацию строк или регулярные выражения для очистки ввода перед добавлением его в LDAP-Фильтр. Всегда полагайтесь на встроенные механизмы экранирования вашей LDAP-библиотеки.
Часто задаваемые вопросы
Чем LDAP-инъекция отличается от SQL-инъекции?
Хотя обе Атаки направлены на внедрение вредоносного кода, они работают с разными базами данных. SQL-инъекция эксплуатирует уязвимости в реляционных базах данных (MySQL, PostgreSQL), используя Синтаксис SQL. LDAP-инъекция нацелена на каталоги, использующие протокол Lightweight Directory Access Protocol, и манипулирует LDAP-фильтрами. Механика внедрения схожа (недостаточная санитизация ввода), но целевая среда и синтаксис атаки различаются.
Можно ли обнаружить LDAP-инъекцию сканерами уязвимостей?
Стандартные сканеры уязвимостей (DAST) могут обнаруживать явные случаи LDAP-инъекции, отправляя тестовые payloads и анализируя ответы сервера. Однако слепые инъекции часто остаются незамеченными, так как не вызывают очевидных ошибок или изменений в выводе. Для надежного выявления требуется ручное тестирование (pentesting) и статический анализ кода (SAST), проверяющий места конкатенации строк в запросах.
Какие инструменты защиты эффективнее всего против этой атаки?
Наиболее эффективным методом является использование параметризованных запросов или методов экранирования, предоставляемых самой LDAP-библиотекой. Дополнительно рекомендуется применять принцип наименьших привилегий для учетных записей, используемых приложением для подключения к каталогу, и внедрять WAF (Web Application Firewall) с правилами, блокирующими подозрительные символы в параметрах запросов.
Влияет ли LDAP-инъекция на производительность сервера?
Да, успешная атака может вызвать значительную нагрузку на LDAP-сервер. Запросы, извлекающие все записи каталога или выполняющие сложные логические операции с большими объемами данных, приводят к высокой нагрузке на процессор и память. Это может быть использовано для организации атаки типа «отказ в обслуживании» (DoS), сделав сервис недоступным для легитимных пользователей.
Итоги
LDAP-инъекция представляет серьезную угрозу безопасности веб-приложений, интегрированных с корпоративными каталогами, позволяя злоумышленникам обходить аутентификацию и получать доступ к конфиденциальным данным.
- Атака возникает из-за прямой подстановки пользовательского ввода в LDAP-фильтры без санитизации.
- Основные последствия включают компрометацию учетных записей, утечку персональных данных и нарушение целостности каталога.
- Виды атак варьируются от простого обхода пароля до сложных слепых инъекций и модификации записей.
- Защита требует обязательного экранирования спецсимволов и использования безопасных API библиотек.
- Регулярный аудит кода и пентестинг критически важны для выявления уязвимых мест в интеграциях с Active Directory и OpenLDAP.