Viele Entwickler benutzen Regular Expressions um Eingaben zu validieren oder Inhalte auf ihre Korrektheit zu prüfen.
Die von RedTeam Pentesting gefundene Sicherheitslücke in der PHP-Funktion eregi() stellt eine besondere Gefahr dar. Die Funktion ist in der Programmiersprache C programmiert und erkennt das Null-Terminierungszeichen „\0“ als Ende des Strings. Laut RedTeam Pentesting werden alle Zeichen nach dem Null-Terminierungszeichen nicht mehr beachtet und damit nicht validiert.
Das Beispiel in dem Heise-Newsticker verdeutlicht das Problem: Heise-Newsticker Meldung
Das Verhalten der eregi() Funktion ist keine neue Erkenntnis, sondern schon lange bekannt. Der älteste Bugtraq Eintrag zu dieser Funktion datiert auf das Jahr 2002. Die Antwort zu diesem Problem war ein simpler Eintrag: „Eregi ist nicht binary safe“. Das bedeutet man kann Überprüfungen mit dieser Funktion ganz einfach umgehen indem man ein Null-Terminierungszeichen einfügt und die weiteren Inhalte ohne Validierung übergibt.
Das größere Problem ist, dass sich kaum ein Programmierer die vollständige Dokumentation zu dieser Funktion durchliest und damit nicht weiß, dass die Funktion gefährlich ist!
Das Problem kann man mit Magic Quotes umgehen, die Sonderzeichen wie ‚, „, \ und NULL in einer Zeichenkette automatisch einen Backslash(\) voranstellt. Eine Saubere Lösung wäre aber der Einsatz der Perl-Syntax-kompatiblen preg_*-Funktion.
Quellen und Informationen:
- Unauthorized password recovery in phpBannerExchange, Sicherheitsmeldung vom RedTeam Pentesting
- Authentication bypass in phpBannerExchange, Fehlermeldung vom RedTeam Pentesting