LDAP Injection (Lightweight Directory Access Protocol Injection) je typ útoku, který využívá zranitelnosti ve webových aplikacích, jež komunikují s LDAP (Lightweight Directory Access Protocol) servery. LDAP je standardní protokol pro přístup k informacím uloženým v adresářových službách, které často obsahují důležitá data, jako jsou uživatelské účty, adresáře, role a další citlivé informace.
LDAP Injection umožňuje útočníkovi manipulovat s LDAP dotazy, aby získal přístup k těmto citlivým informacím nebo vykonal nežádoucí operace. Tento typ útoku může vést k úniku dat, eskalaci práv nebo dokonce úplnému kompromitování systému.
V tomto článku si ukážeme, co LDAP Injection je, jak funguje, jaké jsou jeho příklady a jak se proti němu bránit.
Co je LDAP Injection?
LDAP Injection je útok, který využívá slabiny ve webových aplikacích, jež používají LDAP pro autentifikaci nebo vyhledávání informací v adresářové službě. Aplikace mohou být zranitelné, pokud správně nevalidují a nečistí vstupy od uživatele, což umožňuje útočníkovi manipulovat s LDAP dotazy. Tímto způsobem může útočník vkládat své vlastní příkazy do LDAP dotazu, což může vést k neautorizovanému přístupu, změnám dat nebo dokonce úplnému získání kontroly nad aplikací.
LDAP Injection je podobný SQL Injection, ale místo manipulace s databázemi se útočník zaměřuje na LDAP dotazy, které ovlivňují výsledky adresářových služeb.
Jak LDAP Injection Funguje?
Útočník využívá LDAP dotazy, které aplikace provádí na základě uživatelských vstupů. Typickým scénářem je, že webová aplikace přijímá uživatelský vstup (například přihlašovací jméno a heslo), který je následně vložen do LDAP dotazu, aby se ověřil uživatel. Pokud aplikace neprovádí správnou validaci vstupů, útočník může manipulovat s těmito vstupy a změnit chování LDAP dotazu.
Příklad zranitelného kódu:
# Příklad zranitelného kódu v Pythonu
user_input = request.GET['username']
query = "(uid=" + user_input + ")"
ldap.search(base_dn="dc=example,dc=com", search_filter=query)
Pokud aplikace nevaliduje user_input
(uživatelský vstup), útočník může zadat hodnotu jako *
, což způsobí, že LDAP dotaz bude vypadat následovně:
query = "(uid=*)"
Tento dotaz by mohl vrátit všechny uživatele v adresáři, což by mohlo umožnit útočníkovi získat přístup k citlivým informacím o všech uživatelských účtech.
Příklady LDAP Injection
Získání seznamu uživatelů
Pokud aplikace používá LDAP pro autentifikaci uživatelů, útočník může využít LDAP Injection k tomu, aby získal seznam všech uživatelů v adresářové službě. To může být užitečné pro pozdější útoky, jako je získání hesel nebo uživatelských jmen pro jiný typ útoků, například brute-force.Omkódování autentifikačních procesů
Útočník může manipulovat s LDAP dotazy pro zajištění, že autentifikační proces aplikace bude vždy úspěšný, i když zadané údaje nejsou platné. To může vést k nelegitimnímu přihlášení a neoprávněnému přístupu k chráněným informacím.Změna nebo odstranění dat
Pokud má aplikace umožněno měnit informace v adresářových službách, LDAP Injection může být použit k úpravě nebo odstranění dat. Například útočník může změnit hesla, přidat nové uživatele s administrátorskými právy nebo smazat důležitá data.
Příklady Útoků s LDAP Injection
Útok na LDAP server v nezabezpečené aplikaci
Útočníci mohou zneužít aplikaci, která nesprávně validuje vstupy, aby upravili LDAP dotaz. Místo ověření platného uživatele by útočník mohl zadat hodnotu, která vrátí všechny uživatele v databázi, což může vést k exfiltraci dat o uživatelských účtech.Manipulace s autentifikací
V případě, že aplikace využívá LDAP k autentifikaci uživatelů a neprovádí dostatečnou validaci vstupů, útočník může zadat vstupy, které způsobí, že dotaz na serveru bude vždy úspěšný. Tímto způsobem může obejít autentifikaci a získat přístup do chráněných oblastí aplikace.
Jak se Bránit proti LDAP Injection?
Validace vstupů a sanitizace
Prvním a nejdůležitějším krokem k ochraně před LDAP Injection je důkladná validace a sanitizace uživatelských vstupů. Ujistěte se, že uživatelské vstupy, které jsou používány v LDAP dotazech, neobsahují žádné nebezpečné znaky nebo nečekané hodnoty. To může zahrnovat odstranění nebo escapování speciálních znaků, jako jsou*
,(
,)
, nebo&
, které mohou být zneužity pro manipulaci s dotazy.Použití připravených dotazů (Prepared Statements)
Podobně jako u SQL Injection, použití připravených dotazů (prepared statements) může zabránit LDAP Injection. Tento přístup zajišťuje, že vstupy jsou vždy ošetřeny a správně uzavřeny v rámci dotazu, což zabraňuje útočníkovi manipulovat s dotazem.Omezte přístup k LDAP serverům
Zabezpečte LDAP servery tak, aby přístup k nim měl pouze oprávněný a bezpečně nakonfigurovaný systém. Omezte možnost neautorizovaného přístupu k adresářovým službám.Přístupová kontrola
Ujistěte se, že aplikace a její LDAP servery mají správně nakonfigurovanou přístupovou kontrolu, která omezuje operace, které mohou být prováděny na serveru. Například byste měli omezit možnost měnit nebo mazat data pouze na administrátorské účty.Monitorování a auditování
Monitorujte a provádějte pravidelný audit aktivit, které probíhají na LDAP serverech a webových aplikacích. To vám umožní včas detekovat případné pokusy o LDAP Injection a reagovat na ně dříve, než způsobí větší škody.
Závěr
LDAP Injection je vážný bezpečnostní problém, který může vést k nelegitimnímu přístupu k citlivým datům, změnám v adresářových službách nebo úplnému kompromitování systému. Abychom se proti tomuto útoku bránili, je nezbytné provádět důkladnou validaci uživatelských vstupů, používat připravené dotazy, omezit přístup k LDAP serverům a monitorovat všechny přístupy a operace prováděné v adresářových službách. Tímto způsobem lze minimalizovat riziko LDAP Injection a chránit citlivé informace před zneužitím.