Montag, 1. März 2010


Topthema

Donnerstag, 26. Februar 2009 | Topthema

About Security #194: Schwachstellen-Suche: LDAP-Injection

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/047566)

Das Lightweight Directory Access Protocol LDAP dient der Abfrage von Verzeichnisdiensten. Auch in LDAP-Abfragen kann analog zum Vorgehen bei einer SQL- oder XPath-Injection zusätzlicher Code eingefügt werden, mit dem die Abfrage manipuliert und auf eigentlich nicht zugängliche Daten zugegriffen werden kann.

LDAP - Eine kurze Einführung

LDAP dient dem Zugriff auf hierarchisch organisierte Verzeichnisse, die prinzipiell beliebige Daten enthalten können. Häufig werden sie für die Speicherung von persönlichen Informationen wie Namen, Telefonnummern, E-Mail-Adressen, Aufgabenbereichen etc. verwendet. Ein typisches Beispiel ist auch Windows Active Directory mit den Informationen über das lokale Netzwerk. Im Rahmen von Webanwendungen wird LDAP z.B. zum Zugriff auf Mitarbeiter- oder Benutzerverzeichnisse verwendet. Als Beispiel soll im folgenden ein Mitarbeiterverzeichnis dienen.

Die Datenstruktur jedes LDAP-Verzeichnisses ist ein hierarchischer Baum mit Wurzel, Zweigen und Blättern. Das oberste Datenobjekt ist die Wurzel (root), darunter verzeigen sich die darüber liegenden Strukturen. Im Mitarbeiterverzeichnis ist die Organisation im Form des Unternehmens 'FurchtBar' die Wurzel: o=FurchtBar. Die einzelnen Mitarbeiter können in Zweigen unterhalb der Wurzel gespeichert werden: ou=mitarbeiter,o=FurchtBar. Das gleiche gilt für die Abteilungen: ou=abteilung,o=FurchtBar.

Für die Organisation der Daten wird ein vorgegebenes Schema verwendet, das die zu verwendenden Objektklassen mit ihren Attributen definiert, z.B. die Klasse Mitarbeiter oder Abteilung. Die einzelnen Verzeichniseinträge werden LDAP-Objekte genannt und gehören zu mindestens einer Objektklasse. Identifiziert werden sie durch den eindeutigen Distinguished Name (DN), z.B. uid=emustermann,ou=mitarbeiter,ou=IT-Abteilung,c=de,o=FurchtBar.

Die Typenbezeichnungen der Attribute sind meist einfach zu merkende Kürzel wie z.B. cn (common name), ou (organizational unit) oder c (country). Bei der Suche im LDAP-Verzeichnis können die einzelnen Zweige adressiert und Objekte daraus ausgewählt werden.

Ein Beispiel

Als Beispiel soll eine Webanwendung eine Suchfunktion für Mitarbeiter bereit stellen, die entsprechenden Informationen sind in einem LDAP-Verzeichnis gespeichert.

Mitarbeitersuche

Name des Mitarbeiters
[Suchen]

Ergebniss(e)

cn abteilung email
Ratlos, Rudi Beschwerdestelle rr@furchtbar.example


Wird als zu suchender Name z.B. Ratlos eingegeben, wird von der Anwendung daraus die folgende LDAP-Abfrage gebildet:

<LDAP://ldap.furchtbar.example>;(givenName=Ratlos);cn,abteilung,email

Die Abfrage enthält zwei Schlüsselelemente:

  • Den Suchfilter: givenName=Ratlos
  • Die auszugebenden Attribute: cn,abteilung,email

Wird die Benutzereingabe ungeprüft und ungefiltert übernommen, kann ein Angreifer die Abfrage manipulieren.

Einschleusen von Attributen

Um andere als die vorgegebenen Attribute abzufragen, muss der Angreifer zuerst die Klammer um den Suchfilter schließen und dann seine eigenen Attribute angeben. Eine mögliche Eingabe ist

Ratlos);telefon,cn;

mit der sich daraus ergebenden LDAP-Abfrage

<LDAP://ldap.furchtbar.example>;(givenName=Ratlos);telefon,cn;);cn,abteilung,email

Die manipulierte Abfrage liefert eine zusätzliche Spalte mit der Telefonnummer des Benutzers zurück:

Mitarbeitersuche

Name des Mitarbeiters
[Suchen]

Ergebniss(e)

telefon cn;);cn abteilung email
1234567 Beschwerdestelle rr@furchtbar.example


Die 2. Spalte der Tabelle enthält den unsinnigen Attributnamen cn;);cn, für den es keine Ausgabe gibt. Da die Attribute der Abfrage aus einer durch Komma getrennten Liste bestehen, wird alles zwischen einem Komma und dem nächsten als Attributname aufgefasst. Im Falle eines nicht existierenden Attributnamens gibt der LDAP-Server eine Fehlermeldung aus. Ungültige Namen, die mit einem gültigen Attributnamen gefolgt von einem Semikolon beginnen, werden dagegen toleriert: Durch die Angabe von cn; in der Eingabe wird die Fehlermeldung unterdrückt.

About Security: Die komplette Serie

Der Angriff kann nahezu beliebig ausgeweitet werden, indem weitere Attribute angegeben und als Suchfilter ein Stern eingegeben wird, der als Wildcard-Zeichen fungiert:

*);cn,telefon,c,cn;

liefert die gewünschten Attribute für alle vorhandenen Benutzer:

Mitarbeitersuche

Name des Mitarbeiters
[Suchen]

Ergebniss(e)

cn telefon c cn;);cn abteilung email
Wer, Irgend 1234561 D Beschwerdestelle iw@furchtbar.example
Keiner, Gar 1234562 D Bestellannahme gk@furchtbar.example
...


Manchmal wird die Benutzereingabe nicht direkt in den Suchfilter übernommen, sondern als Teil eines komplexeren Filters verwendet. Dadurch kann z.B. die Suche auf Mitarbeiter aus dem jeweiligen Land oder aus bestimmten Abteilungen beschränkt werden. Ein Angreifer kann dann versuchen, durch eine entsprechend formulierte Suchanfrage die vorhandene Anwendungslogik zu manipulieren und auf eigentlich nicht zugängliche Daten zuzugreifen. Wie das funktioniert und wie LDAP-Injection-Schwachstellen gefunden und verhindert werden können, erfahren Sie in der nächsten Folge.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

Kommentare

Folgende Links könnten Sie auch interessieren