magic_quotes und suchmaschinenfreundliche URLs
Nachdem uns HHG freundlicherweise auf die Mängel in den XT- und Gambio-Patches für das magic_quotes-Problem bei den suchmaschinenfreundlichen URLs hingewiesen hat (vielen Dank nochmal dafür!), haben wir uns die ganze Problematik noch einmal genauer angesehen. Nachdem wir HHGs Verbesserungsvorschläge in einen überarbeiteten Security-Patch haben einfließen lassen, sind uns dabei weitere Lücken im selben Bereich aufgefallen:
Bei Verwendung der suchmaschinenfreundlichen URLs werden Parameter an den Shop nicht direkt ins GET-Array geschrieben, sondern über die PATH_INFO übertragen, von wo aus sich der Shop die key/value-Pairs zieht und diese quasi selbst ins GET-Array schreibt. Durch dieses Verfahren wird allerdings die Anwendung der PHP-Sicherheitseinstellung magic_quotes_gpc umgangen, wodurch die Einspeisung von SQL-Injections erleichtert wird.
Der ursprünglich von XT empfohlene Sicherheitspatch wendet die Funktion addslashes() an den GET-Values an, um das magic_quotes_gpc-Verhalten nachzustellen. Vergessen wurde dabei allerdings, dass sich magic_quotes_gpc auch auf die GET-Keys auswirkt und diese darum ebenfalls mit addslashes() behandelt werden sollten, um den Shop effektiver gegen SQL-Injections zu schützen.
Weiter ist uns noch ein anderes Problem bei der Säuberung der suchmaschinenfreundlichen URLs aufgefallen: Arrays, die über das „suchmaschinenfreundliche Format“ an den Shop übergeben werden, werden nicht gesichert, wodurch neben SQL-Injections theoretisch auch Cross-Site-Scripting (XSS) möglich wird.
Unser überarbeiteter Security-Patch beinhaltet
– HHGs Korrekturen bzgl. get_magic_quotes_gpc()
– die Behandlung der GET-Keys mit addslashes()
– und die Säuberung mehrdimensionaler GET-Arrays aus suchmaschinenfreundlichen URLs
Download über die URL
http://www.gambio-shop.de/downloads/file.php?id=patch-081124
(Installationsanleitung enthalten)
Hi. Klasse Sache nur leider geht der DL Link nicht. Es kommt eine weisse Seite.
Gruß
Christian
😉 Stimmt, der Link war wegen einer kleinen Umstellung grade einige Sekunden nicht erreichbar. Waren aber wirklich nur Sekunden… Nun sollte es wieder gehen!
Jo geht bestens.. Danke habe schon mit dem fixen begonnen. Nochmasl fetten Dank.
[…] in Bezug auf Sicherheitslücken, haben wir heute ( Danke Herr Döhner ) eine Nachricht im Gambio Blog gelesen. In dieser werden weitere Sicherheitslücken bekannt gegeben und es wird dringenst […]
[…] Sicherheitspatches herausgegeben wurden, wurden nun weitere Sicherheitslücken entdeckt. Wie im Gambio Blog nachzulesen ist, wird dieses Patch dringend für alle Shops auf Basis von xt:Commerce […]
[…] Patch kann bei Gambio im Blog heruntergeladen werden, des weiteren hat auch xtc-load.de über das Patch berichtet. Auch bei xtc-load.de kann das […]
Dieser Patch schafft leider mehr Probleme als er löst.
Der „Fix“ der class.inputfilter.php ist schlicht unnötig. Für XTC 3.04 SP2.1 macht er sogar den „alten“ Sicherheitspatch für die clas.inputfilter wieder rückgängig, der das XSS Problem schons seit 1,5 Jahren gefixt hat. (http://www.xt-commerce.info/index.php?_m=downloads&_a=viewdownload&downloaditemid=3&nav=0 )
Die XSS Lücke ist also auf anderes (und eigentlich schon lange behobenes) Problem zurückzuführen.
Um die GET Keys zu säubern und den Array Teil zu korrigieren sollte folgendes ausreichen:
for ($i = 0, $n = sizeof($vars); $i 0) {
while (list ($key, $value) = each($GET_array)) {
if((bool)get_magic_quotes_gpc()) $key = addslashes($key);
$_GET[$key] = $value;
}
}
Toll,Gambio ist immer am Zahn der Zeit 😉
Danke an den Entdecker der Sicherheitslücke und natürlich an das Gambio Team.
Immer eine Empfehlung wert.
Hallo PatchFix,
es ist richtig, dass der Gambio-Patch vom 24.11.08 die Änderungen des XT-Patches vom 01.06.08 nicht beinhaltet. Die Lücke wurde durch eigenen Code geschlossen, der unter anderem gleichzeitig die Lücke bzgl. der GET-Keys schließt.
Danke für deinen gutgemeinten Tipp mit dem vereinfachten Code. In dem Beispielcode fehlt allerdings die Rekursion. Tiefer verschachtelte Arrays werden dadurch nicht berücksichtigt. Darum ist unser Code im Inputfilter auch ein wenig umfangreicher ausgefallen. Dieser geht die Arrays rekursiv durch und erreicht damit ALLE enthaltenen Keys und Values unabhängig von deren Verschachtelungstiefe.
Grüße, Nonito