Seit ein paar Stunden grassiert die „Don’t click“-Pest auf Twitter. Zu tausenden tauchen Tweets wie der von Andreas auf. Klickt man auf den Link, gelangt man zu einer leeren Seite, die lediglich einen Button enthält auf dem steht: „Don’t click!“. Folgt man seinem inneren Trieb, den Button zu klicken, ist es zu spät: schon hat man selbst den „Don’t Click“ Tweet abgeschickt.
Was auf den ersten Blick wie ein weiterer Twitter-Bug aussieht, ist in Wirklichkeit ein sehr gemeiner Bug in so ziemlich jedem halbwegs modernen Browser. Auf Twitter verbreitet er sich aufgrund der Geschwindigkeit des Dienstes unglaublich schnell, nutzen kann man diese Schwachstelle aber auch auf vielen anderen Seiten.
Und so geht’s
Twitter bietet die Möglichkeit, Statusmeldungen vorzubereiten. Dieser Link führt auf die Twitter Homepage, mit einer vorausgefüllten Statusnachricht. Wenn der Benutzer jetzt noch den „Update“-Button klicken würde, wäre meine Botschaft in der Timeline des Benutzers.
So weit, so harmlos. Spannend wird es erst, wenn man den Benutzer jetzt noch dazu bringen könnte, den Update Button zu klicken. Die „Don’t Click“ Seite bedient sich eines einfachen Tricks um dieses Ziel zu erreichen: Sie tarnt den Twitter-„Update“-Button als etwas anderes, in dem Fall eben als „Don’t click“-Button. Zunächst wird die vorher präparierte Twitter-Status-Seite in einem Frame geladen. Diese muss dann getarnt werden, in dem Fall, indem sie transparent gemacht wird. Hinter die unsichtbar gemachte Seite muss ich nun nur noch ein lohnendes Ziel zum Draufklicken packen. Einen Playbutton für ein lustiges YouTube Video, einen Downloadlink für ein Lied, oder einen unscheinbaren Button auf dem steht „Don’t Click“.
Denn wenn ich probiere irgendetwas auf der Fake-Seite anzuklicken, landen alle Klicks in der darüberliegenden Twitter-Seite – egal, ob diese transparent ist oder nicht.
Der Fehler liegt also im Browser und nicht bei Twitter. Zum einen, weil es möglich ist, transparente Elemente anzuklicken. Zum anderen, weil man überhaupt andere Seiten transparent laden kann.
Wie kann ich mich schützen?
Es gibt keine Notwendigkeit euer Twitter-Passwort zu ändern: die Seite hat es zu keinem Zeitpunkt gekannt. Ihr seid auf einen alten Trick reingefallen, wie er öfters in Zeichentrickfilmen auftaucht: ein Stein wird wie ein Fußball angemalt, damit man ihn wegschießen will.
Im konkreten Fall hat Twitter schon reagiert, noch während ich diesen Artikel schrieb: Der Trick funktioniert nur noch, wenn JavaScript abgeschaltet ist.
Einen wirklich guten Schutz darüber hinaus gibt es leider noch nicht: Nahezu jeder Browser ist anfällig für diesen Fehler, und auch das Abschalten von JavaScript, Flash oder Plugins bringt in diesem Fall mal überhaupt nichts.
Für die allereinfachsten Angriffsformen habe ich eine css Datei geschrieben, die das Ausblenden von Frame verhindern soll.
iframe {
opacity: 1 !important;
z-index: 10000000 !important;
}
In Firefox muss man dazu diesen Code in die Datei userContent.css im chrome Ordner der eigenen User-Profiles legen. In Safari kann man die Datei userContent.css irgendwohin legen, man muss sie dann aber unter Einstellungen -> Erweitert im Menü „Style Sheet“ auswählen.
Ob ihr euch richtig schützt, zeigt euch diese Testseite.
ja ja ja.. immer diese Albereien, als gäbe es keine ernsthaften Probleme
Hmm. Das das der echte „Update“-Button war schnall ich erst jetzt. Hammer hart.
Aber irgendwie trotzdem kuhles Spiel und wie alle sich nicht dagegen wehren konnten. muahahah. xD
Bei mir mit Opera hat der Trick nicht funktioniert, obwohl ich ‚Don’t click‘ angeclickt habe
Was mich wundert: Warum opacity: 0.5? Damit wird doch jeder iFrame halbtransparent, also z.B. auch alle Google Ads. Wäre nicht der Wert 1 besser, oder übersehe ich da was?
Wow, erstklassiger Beitrag und so schnell reagiert! Habe eben erst bei Twitter einen Heise-Link zum Thema gefunden. Dein Beitrag geht tiefer ins Detail!
GAAAANZ Böse!!! Ab: Wie kann ich mich schützen? 2. Zeile bitte das seit in seid ändern. Also bitte ;-)
Also hab ich gegen den weiß angemalten Stein getreten? Das erklärt die Schmerzen.
Da pennt man nach einem langem Tag (twitter aus, um was zu schaffen ^^) auf der Couch ein und dann sowas. Deutschlands Service Blog #1 versorgt einen mit allen Infos. Damn You Stephen Fry!
Danke Max, Danke Spreeblick.
Mit dem CSS sieht allerdings Gmail aus, als hätte es sich als Gespenst verkleidet.
@#709038: Weil ich einen Fehler gemacht habe und du ihn bemerkt hast. Ist korrigiert, vielen Dank!
ah ja, gute maßnahme.
ABER: auch wenn man nun alle schuld von twitter auf die browser schieben will, sollte man das sich nicht so einfach machen. die mehrheit da draußen sind DAUs, selbst wenn sie twitter bedienen können.
wie ich in meinem post schon schrieb, sind hier auch die entwickler gefragt, solcherlei dummheiten im vorfeld abzufangen.
dennoch danke für den browser-tipp!
übrigens: mein firefox auf arbeit hat mich bereits auf eine XSS-attacke hingewiesen, bevor ich wirklich klicken konnte …
Bei mir hat es nicht funktioniert, folglich habe ich gedacht alle schicken den Scheiß manuell ab, was mir wiederum den Gedanken herbeigerufen hat, dass alle ’nen totalen Schatten haben.
@#709034: Das könnte zu einen ernsthaften Problem werden wenn man auf ähnliche Weiße auf einer E-Banking Seite die Transaktion bestätigen lässt.
„Es gibt keine Notwendigkeit euer Twitter-Passwort zu ändern:“
Schon geschehen! :D
Danke für die ausführliche Aufklärung.
Ich habs auf dem iPhone probiert aber da gabs keinen ‚don’t klick it‘ button. Mir kam der ganze link schon etwas spanisch vor aber ich klick immer auf alles was von Max kommt … sollte ich mal bleiben lassen.
Hier http://tinyurl.com/ammk9y noch eine Variante zum mitnehmen für unterwegs.
bei mir hats auch nicht funktioniert. ach, ich hab ja gar kein twitter, the third life for nerds.
Doch klar. Firefox mit NoScript. Damit funktioniert so ein Käse nicht. NoScript warnt vor Click Jacking.
Bei mir hat’s auch nie funktioniert… Ich benutze WebKit (Safari).
der hohe z-index für iframes führt leider bei manchen seiten dazu, dass zB dropdown-menus hinter dem iframe verschwinden. und: wenn ich als bösewicht von diesem hack weiss, kann ich meinen bösen content eben genau eins höher setzen“¦
die opacity setzen ist ok. aber müsste man nicht auch -khtml-opacity etc setzen um ganz sicher zu gehen, oder geht der trick bei denn betreffenden browsern eh nicht?
Es wäre doch sehr viel einfacher wenn der Webmaster von Twitter verhindern würde dass Twitter-seiten erfolgreich in einem iframe geladen werden können, indem die Seite selbst überprüft ob sie in einem iframe geladen wird und wenn, sich dann eben nicht lädt.
Mensch sowas hatte ich doch auch schon mal auf meinen Webseiten eingebaut, ist doch ein einfacher Schutz vor Webnapping.
Wieso sollen die User sich um dieses Sicherheitsproblem kümmer, wenn es Aufgabe von den Twitter-Webmastern ist sich darum zu kümmern dass sowas erst gar nicht geht.
@#709102: Alles, was aktuell ist, kann mit Opacity umgehen. Aber das css darf gern erweitert werden.
@#709103: Twitter hat die Funktion mitlerweile eingebaut. Wobei ich hier die Verantwortung ganz deutlich bei den Browserherstellern und nicht bei Twitter sehe.
@#709082: Der beschriebene Trick müsste auch mit NoScript funktionieren. Wie schon gesagt: Javascript ausschalten hilft in diesem Fall nicht!
Ich stimme Max zu: das ist ganz klar ein Browser-Problem.
(Ich hab das schon benutzen müssen, um auf der eigenen Seite File-Upload-Buttons zu verstecken, weil die nicht ins CD passten“¦ Das ist aber widerlich! opacity=0 ist evil!
Ein ganz gutes Video, was ebenfalls erklärt wie sowas funktioniert und was dadurch alles möglich ist, gibts unter youtube: http://www.youtube.com/watch?v=gxyLbpldmuU
Das zeigt, das mit einem simplen Browser-Game einiges ungewollt eingestellt wird.
Bei mir hat das Addon „NoScript“ Alarm geschlagen, allerdings nur weil hinter der Seite eben ein Cross-Scripting Versuch liegt, den NoScript nicht mag. Es hat also das Posting unterbunden. Ich habe es allerdings auch erst auf meinem Testrechner probiert, als ich hörte, dass hinter der „Dont click“ Arie was anderes steckt. war also gewarnt.
unter dem oben geposteten video ist übrigens ein hinweis, dass NoScript offenbar doch auch vor solchen tricks warnen kann, wenn sie nicht js benutzen. keine ahnung ob das stimmt.
Ich probier das mit NoScript mal aus, obwohl ich das Konzept im allgemeinen nicht sonderlich mag. Wenn es vor diesem Problem gewarnt hat ist das gut: der Don’t Click Buton kam ja ohne JavaScript aus.
Ach wie gut das NICHT twittere. :-)
@#709134: Ja, darüber können wir uns alle jeden Tag freuen.
Firefox Addon Stylish schaft auch Abhilfe, einfach installieren und neuen Stil hinzufügen. Dort nur oben angegebenes iframe css einfügen und auf speichern gehen. Es wird automatisch auf jeder Seite angewendet.
Leute – das hat nichts mit Javascript zu tun! NoScript erkennt konkret Click Jacking! Wer glaubt NoScript könne nichts als Javascript verbieten, kennt die Funktionen dieser Extension schlicht nicht!
„Der Fehler liegt also im Browser und nicht bei Twitter.“
der fehler sitzt vorm rechner. wie immer. der beste schutz ist immer noch, einfach mal das hirn einzuschalten. ist aber oft schwerer als man denkt, falls man das ueberhaupt noch kann..
@#709064: wie soll das gehen? denk mal drueber nach. der spass ist nicht wirklich gefaehrlich.
@#709157: Leut – Ganz konkret steht nichts anderes in der Beschreibung: „¦erlaubt das Ausführen von JavaScript, Java (und anderen Plugins) nur bei vertrauenswürdigen Domains Ihrer Wahl
Wenn es den beschriebenen Trick aufspüren kann, macht es mehr als das. Steht so nicht da. Kann man also nicht wissen.
@#709158: Der beste Schutz ist immer noch, das Internet gar nicht erst zu benutzen. Ist oft schwerer als man denkt“¦
Doch, können selbst Leute wissen die NoScript nicht benutzen und sich folglich noch nie durch die Optionen klickten – die Homepage ist nämlich noscript.net, addons.mozilla org ist nur die zentrale Anlaufstelle über die alle Firefox Extensions vertrieben werden. Das man dort nur eine extrem verkürzte Zusammenfassung erhält, ist normal.
@#709168: das klingt doch prima. danke. ich war zu faul zu recherchieren, geb ich zu. der erste eindruck (der bekanntermassen trügt) war der, dass das plugin nix macht, ausser javascript zu disablen. kann ja mal vorkommen“¦
NoScript gibt dem User halt die gesamte Kontrolle zurück über all den Plugin Content der so durch aktuelle Browser fliegt. Ganz egal ob es da jetzt um _Java_, Silverlight, Flash irgendwelche IFRAMEs oder halt Sicherheitsprobleme wie Click Jacking geht. Zu kontrollieren, welche Seite welche _Javascripte_ ausführen darf, ist da nur ein Teil des Pakets. Darüber hinaus räumt es mit Cross Site Scripting auf, Web Bugs und bietet, für den Namen, auch etwas exotischere Funktionen wie https Zwang, für Seiten die das unterstützen.
Natürlich wird dem vergleichsweise umfangreichen, zusätzlichen Sicherheitskonzept das diese Extension einbaut der Name NoScript nicht mehr gerecht, ich finde ihn aber dennoch gut, denn immerhin lässt der Name schon mal vermuten das man damit Skripte und deren Verhalten kontrollieren kann. Sonstiges Marketing-Gedöns lässt einen vom Namen her oft ja nicht mal mehr ahnen worum es auch nur ungefähr geht.
Das einzige was man auf Spreeblick ohne Skripte verpasst, ist das Feld unter Postings, dass erlaubt bis 20 Minuten nach abschicken Edits vorzunehmen. Sollte man das doch mal brauchen, kann man es ja temporär erlauben. Viele Seiten sind auch schneller IMHO, es muss einfach weniger vom Browser getan werden.
wenn man überlegt, was diese aktion an reaktion bewirkt, was hätte der bastler alles bewirken können, hätte er seine energie in etwas sinnvolleres gesteckt.
@#709198: Aber was ist denn sinnlos daran, eindringlich auf eine böse Sicherheitslücke in allen Browsern hinzuweisen?
Wer ist eigentlich dieser Twitter?
@#709217:
Naja, man könnte den Browser-Programmierern doch auch schlicht sagen, „žIhr habt da übrigens ’ne Lücke!“ ohne ’ne halbe Million People und mehr mit da reinzuziehen.
Danke für den Hinweiß ! Wäre bestimmt drauf reingefallen…
@#709226: oh die browserprogrammierer selbst haben vielleicht von dem fehler gewusst, aber weil zb die marketing-leute sagen: »Baut erstmal dieses oder jenes Feature ein!« hatten sie noch keine zeit, das zu fixen.
JETZT sagen auch die marketing-leute: »Ihr müsst ganz schnell den Fehler beheben!«
das ist so ähnlich wie randale auf demos. eigentlich nicht ok, führt aber dazu, dass die demo selbst überhaupt in die nachrichten kommt und das jeweilige thema erst dann von bestimmten leuten wahrgenommen wird. und das kann dann auch »richtig« gewesen sein.
in diesem fall ist nicht einmal jemand zu schaden gekommen. aus sicht von jemandem, der möchte, dass sich programmierer um die beseitigung von solchen lücken kümmern, ist das also eine durchaus erfolgreiche aktion gewesen.
Hey, von der kleinen Epidemie wusste ich ja noch gar nicht. Vielen Dank.
Clickjacking ist in der Tat in den aktuellen Browsern ein Problem. Gegen das NoScript tatsächlich hilft. Eine ungewollte Twitter-Nachricht zu verschicken, ist ja eine Sache. Mit der gleichen Taktik kann man allerdings den Benutzer z.B. unbemerkt dazu bringen, Flash den Zugriff auf Webcam und Mikrofon zu gestatten.
Lesenswert ist dazu wie so oft das Gnucitizen-Weblog.
toll, was heutzutage technisch alles möglich ist.