Skip to content

Websecurity - Logikfehler in der Authentifizierung

Auch in dieser Folge geht es weiter um Angriffe über Logikfehler in Webanwendungen. Im Jahr 2012 wurden die zum Beispiel von Sumit Siddharth und Richard Dean, David Byrne und Charles Henderson (Paper als PDF) oder Marcus Pinto auf Sicherheitskonferenzen vorgestellt wurden.

Logikfehler in der Authentifizierung

Das man Passwörter nicht als Klartext in der Datenbank (oder sonstwo auf dem Server) speichern darf ist allgemein bekannt, also werden sie als (natürlich gesalzener) Hash-Wert gespeichert.

Bei der Authentifizierung werden Benutzername und Klartext-Passwort (natürlich über eine verschlüsselte Verbindung) an den Server übertragen. Der Server erzeugt den Hash (ggf. unter Verwendung des zum Benutzernamen gehörenden Salt-Werts) und vergleicht ihm mit dem gespeicherten Wert. Stimmen beide Werte überein, ist die Authentifizierung erfolgreich.

So weit, so gut. Und was passiert, wenn ein Angreifer sich zum Beispiel über eine SQL-Injection-Schwachstelle die gespeicherten Zugangsdaten beschafft? Dann kennt er die Benutzernamen und den Hash-Wert der zugehörigen Passwörter, kann sich damit aber nicht einloggen, da dafür Benutzername und Klartext-Passwort benötigt werden. Der einzig mögliche Angriff sollte nun das Brechen des Passwort-Hashes sein, was durch das Salzen erschwert wird. So weit die Theorie. In der Praxis sieht es leider manchmal anders aus.

Beispiel 3: Der Hashwert ist genau so gut wie der Klartext-Passwort

Sumit Siddharth und Richard Dean wählten als Beispiel für einen Logikfehler in der Authentifizierung ColdFusion aus. Darin wurden 2010 mehrere Directory-Traversal-Schwachstellen entdeckt (CVE-2010-2861). Ein Angreifer konnte darüber zum Beispiel die Datei mit dem Administrator-Passwort herunterladen:

http://server.example/CFIDE/administrator/enter.cfm?locale=../../../../../ColdFusion8/lib/ password.properties%00en

Ein Exploit zum Ausnutzen der Schwachstelle wurde bereits kurz nach Veröffentlichung des Updates durch Adobe veröffentlicht, evtl. mittels Reverse-Engineering aus dem Patch entwickelt, da die Entdecker bis dahin keine Details veröffentlicht hatten.

Aber weiter zum Logikfehler. Hatte der Administrator alles richtig gemacht, enthielt diese Datei nur den SHA-1-Hash des Passworts. War er schlampig, war das Passwort als Klartext gespeichert und der Angreifer sicher gerne bereit, dem Admin bei der Verwaltung der Webanwendung zu helfen.

Dummerweise war der Admin aber auch dann nicht auf der sicheren Seite, wenn er selbst alles richtig gemacht und das Passwort verschlüsselt gespeichert hatte. Denn zum Einloggen musste der Angreifer nicht das Passwort kennen, sondern nur dessen Hash-Wert:

JavaScript-Code auf der Login-Seite wandelte das eingegebene Klartext-Passwort automatisch in einen SHA-1-Hash um, aus dem zusammen mit einem Salt-Wert ein HMAC (Hash-based Message Authentication Code) berechnet wurde. Danach wurden HMAC und Salt-Wert an den Server gesendet.

Der Server berechnete seinerseits aus dem gespeicherten Hash-Wert und dem vom Client verwendeten Salt-Wert den HMAC und verglich ihn mit dem vom Client gelieferten Wert. Stimmten beide überein, war die Authentifizierung erfolgreich.

Der Angreifer konnte einfach den ihm bekannten SHA-1-Wert des Passworts als Parameter für die HMAC-Berechnung verwenden und dadurch die Authentifizierung von ColdFusion umgehen. Dass er danach ein eigenes Skript hoch laden konnte, dass dann unter Windows mit SYSTEM-Rechten ausgeführt wurde, war nur noch das berühmte Tüpfelchen auf dem i und keine Schwachstelle, sondern ein Feature - es soll ja durchaus öfter vorkommen, dass ein Administrator eine Datei auf seinen Server hoch lädt. Darüber, ob die unbedingt mit SYSTEM-Rechten ausgeführt werden muss, lässt sich sicher streiten. Eigentlich macht man so etwas nicht, aber einen Kommentar verkneife ich mir mal, hier geht es um Grundlagen und nicht um Standpunkte.

Ein klarer Logikfehler. Anscheinend war den Entwicklern nicht klar, wieso man Hash-Werte salzt, und beim Versuch, ihre Software super sicher zu machen, wurde sie super unsicher. Eigentlich sollte diese Schwachstelle ja wohl inzwischen behoben worden sein. Zumindest in der CVE-Datenbank habe ich aber keinen passenden Eintrag gefunden. Hoffen wir mal, dass die Schwachstelle behoben und nur nicht korrekt gemeldet wurde.

Beispiel 4: Der Benutzer admin ist Administrator, basta!

Einen weiteres schönes Beispiel für einen Logikfehler in der Authentifizierung hat Marcus Pinto beschrieben.

Die E-Mail-Adresse, die ein Benutzer bei der Registrierung angibt, wird für die Bildung des Benutzernamens verwendet. Zuerst wird geprüft, ob sie wohlgeformt ist, im Erfolgsfall wird aus den alphanumerischen Teilen der Benutzername gebildet. So würde zum Beispiel aus

fragen@ceilers-it.de

der Benutzername

fragenceilersitde

So ein Name ist nicht besonders praktisch, aber hier geht es ja um Logikfehler und nicht um Benutzerfreundlichkeit. Was passiert wohl, wenn sich jemand mit der E-Mail-Adresse

ad@m.in

registriert? Das ergibt den Benutzernamen

admin

und der sollte ja wohl bereits reserviert sein. War er im Beispiel von Marcus Pinto aber nicht, stattdessen wurde anstandslos ein Benutzer mit entsprechendem Benutzernamen angelegt. Das wäre noch nicht schlimm, wenn der Benutzer keine besonderen Rechte hätte. Beim Einloggen stellte sich aber heraus, dass genau das der Fall ist: Es wurde ein neuer Benutzer mit Administratorrechten angelegt, der auf alle Administrations-Menüs zugreifen konnte. Schuld war folgendes Stück Code:

if ($_SESSION[‘user']=‘admin’) {
...
}

Es geht aber noch weiter: Beim Aktualisieren des Passworts des Benutzers admin wurde das Passwort des eigentlichen Administrators aktualisiert.

Außerdem war nicht nur der Administrator betroffen, sondern jeder Benutzer. Ein Angreifer, der sich zum Beispiel mit der E-Mail-Adresse

frage@nceilers-it.de

registriert, bekäme den nun nicht mehr eindeutigen Benutzernamen

fragenceilersitde

und kann so die Kontrolle über das Konto des zuvor damit angelegten Benutzers übernehmen. Ein böser Fehler.

In der nächsten Folge geht es weiter um Logikfehler in Webanwendungen.

Carsten Eilers


Übersicht über alle Artikel zum Thema

Neue Angriffe auf Webanwendungen über Clickjacking und Cookies
Websecurity - XSS-Angriffe über XML
Websecurity - Angriffe über Logikfehler
Websecurity - Angriffe über Logikfehler, Teil 2
Websecurity - Logikfehler in der Authentifizierung
Websecurity - Logikfehler in der Authentifizierung und auf der Flucht
Websecurity - Logikfehler finden
Websecurity - Logikfehler vermeiden

Trackbacks

Dipl.-Inform. Carsten Eilers am : Drucksache: PHP Magazin 6.2013 - Passwörter speichern, aber richtig!

Vorschau anzeigen
Im PHP Magazin 6.2013 ist ein Artikel über die sichere Speicherung von Passwörtern erschienen. Vorgestellt werden die verschiedenen Möglichkeiten, Passwörter zu speichern, sowie Angriffe darauf. Das Fazit des Artikels: Fü

Dipl.-Inform. Carsten Eilers am : Drucksache: Entwickler Magazin 2.2014 - Die OWASP Top 10, Teil 1

Vorschau anzeigen
Im Entwickler Magazin 2.2014 ist der erste Teil eines zweiteiligen Artikels über die OWASP Top 10, die zehn gefährlichsten Schwachstellen in Webanwendungen, erschienen. Die Reihenfolge der Schwachstellen ergibt sich aus vier Faktoren

entwickler.de am : PingBack

Die Anzeige des Inhaltes dieses Trackbacks ist leider nicht möglich.

Dipl.-Inform. Carsten Eilers am : Die IoT Top 10, #2: Unsichere Authentifizierung/Autorisierung, Teil 18

Vorschau anzeigen
Weiter geht es mit der Beschreibung der gefährlichsten Schwachstellen in den Geräten des IoT gemäß den Top IoT Vulnerabilities von OWASP. Zur Zeit sind wir beim Punkt 2: "Insufficient Authentication/Authorization". Die ve