Ich ärgere mich nun schon seit einem knappen Jahr über das Portal teleboy.ch. Teleboy ist das schweizweit führende online TV-Portal mit über 735'000 Unique Clients (2013). Es ist eine der meist aufgerufenen Seiten der Schweiz und bietet unter anderem kostenpflichtige Dienste an.
Ich bin zufällig über einige Schwächen gestolpert und entdeckte dadurch gravierende Mängel in der Sicherheit der Seite. Trotz mehrfachem Kontakt mit dem Support wurden diese bisher nicht behoben.
Angefangen hat alles mit einem Mail (25. Juli 2013) an den Support, in welchem ich auf einige Probleme beim Zugiff über https auf das Angebot meldete.
Die Antwort des Supports war, dass das Angebot nur über http verfügbar sei. Das stellte mich nicht zufrieden und ich begann die Probleme weiter zu analysieren. Ich wies das Unternehmen schliesslich auf die diversen mixed content Probleme hin, die nicht mehr zeitgemässe Verschlüsselung der Verbindung und, das zu diesem Zeitpunkt gravierendste, die standardmässig unverschlüsselt übermittelten Logindaten. Teleboy reagierte nicht auf diese Hinweise.
Deshalb nahm ich Anfang dieses Jahres (25. Januar 2014) nochmal einen Anlauf und schrieb eine neue Mail, in der ich all diese Probleme nochmals schilderte. Der Support versprach, das Mail an an die zuständige Abteilung weiterzuleiten und am 7. Februar 2014 bekam ich folgendes Statement:
Entschuldigen Sie die verspätete Rückmeldung. Die SSL-Verbindungen für Login etc. sind bereits in Planung und werden umgesetzt. Die Mixed-Content-Warnungen werden allerdings sicher vorerst noch bleiben, da eine Verschlüsselung von öffentlich zugänglichen Daten wie dem TV-Programm aus unserer Perspektive – zumindest zur Zeit – nicht nötig ist.
Ich gab mich mit dieser Antwort nicht zufrieden und antwortete mit ausführlicher Argumentation. So können ohne die konsequente verschlüsselte Übertragung immer noch Cookies über einen MITM-Angriff abgegriffen werden. Als Antwort von Teleboy kam:
Vielen Dank für Ihr Feedback bezüglich der Sicherheit unserer Seite. Wir haben es unserem technischen Team zur Überprüfung weitergeleitet.
Gleichzeitig fand ich immer wie mehr Sicherheitsdefizite.
XSRF
Um das Passwort oder die E-Mail Adresse bei einem Teleboy Account zu ändern benötigt man weder eine schütztende Session-ID, noch das alte Passwort und man erhält auch keine Bestätigungsmail. Da man standardmässig eingeloggt bleibt, lässt sich so auf einfachste Weise ein (bezahlter) Account klappern. Und selbst wenn man nicht eingeloggt bleibt - wer surft neben dem Fernsehn nicht im Internet?
Das folgende Beispiel könnte man natürlich auch mit JavaScript automatisieren und in einem E-Mail oder einer Webseite verstecken. Dann würde nur schon das Aufrufen der Seite eines Teleboy Nutzers reichen um den Account zu hijacken.
<!DOCTYPE html> <html>
<head> <meta charset="utf-8"> <title>Teleboy.ch XSRF</title> </head> <body> <form action="http://www.teleboy.ch/memberzone/profil/pwd.php" method="post"> <input type="hidden" name="cmd" value="save"> <input type="text" name="row[pwd]"> <input type="text" name="row[pwd_repeat]"> <input type="submit"> </form> </body> </html>
Unsicherer Zugang
Für ein Portal dieser Grösse halte ich das verschlüsseln von Logindaten wie bereits erwähnt für zwingend erforderlich. Ein verschlüsselter Zugang wird zwar angeboten, dennoch ist die Verschlüsselung der Seite definitiv nicht mehr zeitgemäss. Selbst wenn also der Login abgesichert wäre, die Cookies nur über eine sichere Verbindung gesendet würden und kein Inhalt über http eingebunden würde (mixed content), müsste man sich noch immer um seine Daten sorgen.
Glücklicherweise akzeptieren moderne Browser SSL 2 nicht mehr, denn der Teleboy-Server verhandelt immer noch mit längst geknackten Chiffren wie DES oder RC2. TLS 1.2 und Forward Secrecy sind nicht verfügbar. Dazu müsste erst mal OpenSSL, welches von Teleboy genutzt wird, aktualisiert werden, die benutzen nämlich noch eine veraltete Version.
Update: Leider hat Teleboy den Zugang über https kürzlich ganz deaktiviert.
Zeichenmaskierung
Die Suchfunktion weist eine Schwäche gegenüber einigen Zeichen auf. So sollten ' oder > eigentlich von gängigen PHP Funktionen eliminiert werden. Kurioses passiert auch bei der Verwendung von einigen Sonderzeichen (¼, ½, →, ↓, ←, ŧ, €, ł).
>
Sollte eigentlich durch >
ersetzt werden, stattdessen wird für jedes entfernte > ein " am Schluss angehängt und dann nochmals der gesamte verbleibende Suchstring. Andere Zeichen wie < oder + werden wiederum komplett entfernt. Die oben erwähnten Sonderzeichen werden gleich doppelt ersetzt. Das klingt zwar super, ist in der Praxis aber nutzlos. So wird aus ¼ nicht ¼
, was eigentlich korrekt wäre, sondern &#188;
. Sehr unschön aber noch nicht wirklich beunruhigend.
Live Beispiel: http://www.teleboy.ch/search/global/index.php?search=%3E%3E%27%27%26%23188%3B%26%23189%3B
XSS
Wesentlich gravierender wird es bei den Accounts. Zunächst finde ich es ungewöhnlich, dass man man als name der input Felder genau den selben String nimmt, wie er nachher vermutlich für SQL verwendet wird (name="row[first_name]"
). Es würde mich nicht wundern, wenn SQL Injection noch irgendwo möglich wäre.
Nun möchte ich aber auf den Punkt kommen und damit die erste gravierende Sicherheitslücke, welche nicht nur Account-Inhaber gefährdet: Bei den Eingabefeldern im Benutzerprofil wurde gänzlich auf das Maskieren von Zeichen verzichtet. Mit anderen Worten: stored XSS! Wenn man das ganze mit dem Vornamen macht und dann den Anzeigenamen von Benutzernamen auf Vornamen setzt, kann man auf dem ganzen Portal Skripte ausführen! Man braucht sich anschliessend nur bei ein paar Filmen bspw. auf die "Watchlist" zu setzten oder den vertraulich erscheinenden Link zum Profil zu verbreiten und alle Nutzer fallen dem Script zum Opfer.
Auch vorbeugende Massnahmen wie Content Security Policy fehlen.
Wer sich traut darf das obige Beispiel gerne selber testen, solange der Account noch verfügbar ist: http://www.teleboy.ch/memberzone/public/profil.php?profil_id=673456549
Update: Teleboy hat inzwischen auf meinen Artikel reagiert.
Wie weiter?
Am 21. Mai schrieb ich, erneut eine entrüstete Mail an den Support und fasste alle bis dahin gefunden Schwachstellen zusammen. Das einzige was sich bisher geändert hat: Seit Anfang Juni ist https://www.teleboy.ch/ gar nicht mehr verfügbar. Ob das mit meinen Mails zusammenhängt sei dahingestellt.
Abschliessend nochmal alle Punkte zusammengefasst, was ich an Teleboy in Bezug auf Sicherheit kritisiere:
- Logindaten werden unverschlüsselt übermittelt
- Session Cookies können gehijackt werden (keine secure cookie flag)
- Mixed content issues (nicht mehr reproduzierbar, weil https eingestellt)
- Zugriff über HTTPS wurde kürzlich eingestellt
- Unzureichende Verschlüsselung der Verbindung (nicht relevant solange https eingestellt)
- Formulareingaben werden nicht (richtig) maskiert - stored XSS möglich
- Kein Schutz vor XSRF
Es würde mich auch nicht überraschen, wenn demnächst noch ein Lücke gefunden wird, die SQL Injection ermöglicht. Ich habe jedenfalls das Vertrauen in Teleboy verloren. Ich würde auch keinem raten, auf Teleboy für eine Dienstleistung zu bezahlen. Das wäre, wie ich diesem Artikel hoffentlich ausführlich beweisen konnte, eine sehr unsichere Investition.