Archiv für die Kategorie » CSRF «

Stück Schrott tarnt sich als Shop

Donnerstag, 5. August 2010, 8:29 Uhr | Autor: ich

Vorgestern las ich von einem neuen (?) Shopsystem:
E-Commerce System Zeuscart – eine Alternative für Magento?” (t3n.de)

Um die Antwort vorweg zu nehmen: Nein!


Wenn ich eine neue Seite besuche dann kann ich nicht anderes, da muss ich einfach mal irgendwo ein '">xss eingeben… :O)
Zeuscart XSS
Weiteres reflexives Cross-Site Scripting findet sich noch auf den folgenden Seiten: Passwort vergessen, Suche, Registrierung und Login.

Es gibt aber auch die Möglichkeit persistent eigenen Code im Shop zu speichern. Eine Seite die zum Pagemanagement aus dem Backend gehört kann von nicht angemeldeten Besuchern des Shops aufgerufen werden. Auf der Seite können bestehende Einträge editiert, gelöscht und neue hinzugefügt werden.


Seiten aus dem Backend die für jeden Besucher aufrufbar sind, und nicht nur für Shopadmins, gibt es noch weitere:

  • Ausgabe der phpinfo()-Seite.
  • Export aller Produktdaten im Excel-, XML-, CSV- oder TAB-Format.
  • Export aller Kundendaten im Excel-, XML-, CSV- oder TAB-Format.
  • Löschen der Aktivitäten des Admins, die in einer Tabelle gelistet werden.
  • Anzeige der letzten Bestellungen der Kunden, inkl. Name und E-Mail-Adresse.



Nach der Registrierung im Demoshop testete ich auch die Passwort-vergessen-Funktion und wunderte mich gar nicht mehr, dass das von mir vergebene Passwort in der E-Mail stand. Dafür gibt es zwei mögliche Gründe: Entweder wird das Passwort direkt im Klartext in der Datenbank gespeichert oder es wird so kodiert, dass es wieder dekodiert werden kann.

Ich habe mir die Software runtergeladen und kurz in den Quellcode reingeschaut. Die Passworte werden per base64_encode() kodiert und nicht per MD5 oder SHA1 gehasht. Das bedeutet dass alle Passworte die in der Datenbank stehen per base64_decode() dekodiert, also in Klartext umgewandelt werden können.

Hier ein Beispiel für das Kodieren und Dekodieren:
Base64 Kodiert
Base64 Dekodiert
Und hier kann man dies online ausprobieren: “Base64 Kodierer / Base64 Generator” (php-einfach.de)


Und, natürlich fand ich auch noch an vielen Ecken Cross-Site Request Forgery.

Würde dies in eine Seite als unsichtbares Iframe eingebaut und der Shopadmin besucht die Seite während er eingeloggt ist, bekommt er einen weiteren Admin ins System gepflanzt:
http://domain.tld/admin/
?do=subadminmgt&action=insert
[POST]
subadminname=adminb
&subadminpassword=123456
&subadminemail=adminb%40domain.tld
&insert=Add



Noch ein paar Infos für die die sich diese Software anschauen möchten:

Backend: http://ajdemos.com/demo/zeuscart/v3/admin/
User Name: demoadmin
Password: demo123

Frontend: http://ajdemos.com/demo/zeuscart/v3/
User Name: demouser@domainname.com
Password: demouser

Download: http://www.zeuscart.com/download/Zeuscart3.zip


Ich bin sicher dass es noch weitere Schwachstellen gibt, beispielsweise zu SQL-Injection, aber die gefundenen Lücken sind schon vollkommen ausreichend, um die Nutzung abzulehnen. Wer nun noch ernsthaft überlegt dieses Stück Schrott einsetzen zu wollen — dem ist nicht mehr zu helfen.

Vielleicht ist dies auch nur Teil einer Studie, so nach dem Motto: “Wie schrottig darf eine Software sein, bis sie niemand mehr benutzen mag?” ;O)


Eigentlich schreibe ich ja nicht so kritisch über eine Software, aber dieses Teil ist so schlecht und hat so viele Schwachstellen, dass man nicht davon ausgehen kann, dass die Entwickler (immerhin schon Version 3) auf diese noch nie hingewiesen wurden. Eine Google-Recherche nach “Zeuscart” förderte nur Testinstallationen oder bereits gehackte Shops zutage

Thema: CSRF, Open Source, Sicherheit, XSS | 3 Kommentare

“I don’t think CSRF is as big of a deal”

Samstag, 17. April 2010, 11:08 Uhr | Autor: ich

Es ist eine alte Wahrheit: Was Computern leicht fällt, fällt Menschen oftmals sehr schwer und umgekehrt. Und ein Web Vulnerability Scanner kann, wie auch ein Virenscanner, nur etwas finden wenn ihm ein entsprechendes Muster für Vergleiche vorliegt.

Kevin Beaver behauptet: Weil kommerzielle Schwachstellen-Scanner mit dem Aufspüren von CSRF-Lücken Probleme haben, so hätten auch Menschen Probleme beim Auffinden solcher Lücken. Und es wäre auch schwer eine gefundene Lücke auszunutzen. Seine Schlussfolgerung daraus: Man solle dieser Art von Schwachstelle weniger Beachtung schenken und lieber die offensichtlichen, leicht auffindbaren Lücken suchen und schließen.

Erst über den Blogeintrag “CSRF Isn’t A Big Deal – Duh!” (ha.ckers.org) von Robert “RSnake” Hansen bin ich auf Kevin Beaver gekommen.

Kevin Beaver hat angeblich 20 Jahre Erfahrung in der Branche. Und erzählt so etwas seinen Kunden? Wieder ein spezieller Experte. ;O)


Ich weiß nicht wie der Algorithmus eines Web Vulnerability Scanner aufgebaut ist um Lücken zu Cross-Site Request Forgery (de.wikipedia.org) zu finden, aber für mich als Human Web Vulnerability Scanner ist das Auffinden recht einfach.

Wenn eine CSRF-Lücke vorliegt besteht kaum ein Problem ein funktionierenden Exploit zu erstellen, etwas HTML- und JavaScript-Kenntnisse reichen vollkommen aus. Der Angreifer muss sein Opfer nur noch auf eine präparierte Website locken, um zum Ziel zu kommen.


Wenn beispielsweise das Anlegen eines neues Users in einem CMS über ein Formular erfolgt welches folgende Daten versendet:

http://wordpress/wp-admin/user-new.php
[POST]
action=adduser
&user_login=tester
&email=name@mail.tld
&pass1=12345678
&pass2=12345678
&role=administrator

So kann man davon ausgehen das eine CSRF-Lücke vorliegt.

In WordPress gibt es aber noch den Parameter _wpnonce der CSRF verhindert:

http://wordpress/wp-admin/user-new.php
[POST]
_wpnonce=abc123xyz789
&action=adduser
&user_login=tester
&email=name@mail.tld
&pass1=12345678
&pass2=12345678
&role=administrator

Der Wert hinter _wpnonce ist für eine bestimmte Aktion und einen bestimmten Blog immer derselbe. Sollte es, evtl. über eine Sicherheitslücke, möglich sein diesen Wert aus einem fremden Blog auszulesen oder ihn zu berechnen, so täte sich eine CSRF-Lücke auf.

Thema: CSRF, Wordpress | Kommentare geschlossen