Warum die Grammarly-Erweiterung Websites kaputtgemacht hat
- In den vergangenen Monaten gab es immer wieder Berichte über seltsam kaputte Website-Layouts
- Als Ursache stellte sich die Grammarly-Browser-Erweiterung heraus, und um das zu verifizieren, installierte der Autor sie selbst
Wie das Problem entdeckt wurde
- Die Grammarly-Erweiterung fordert folgende Berechtigungen an:
- Zugriff auf Daten aller Websites
- Anzeigen von Benachrichtigungen
- Zugriff auf Browser-Tabs
- Bei Experimenten in Firefox zeigte sich, dass Grammarly ein eigenes Stylesheet in Webseiten einfügt
- Dieses Stylesheet kann auf der Webseite selbst nicht direkt erkannt werden (verstecktes Stylesheet)
- Es umgeht sogar die Content Security Policy
- Innerhalb des
<html>-Tags wird außerdem ein Element <grammarly-desktop-integration> eingefügt (Zweck unklar)
Warum ausgerechnet meine Website?
Reaktion des Autors
- Zunächst erkannte er per Mutation Observer die von Grammarly eingefügten Elemente und überschieb sie mit
!important-Styles
- Danach änderte er den Namen seiner CSS-Variable von
--rem zu --🤡 (Unicode-Emoji)
- Emojis sind als CSS-Variablennamen gültig
- So lässt sich der Konflikt mit Grammarlys globaler
--rem-Definition vermeiden
Der Kern des Problems
- Grammarly erzwingt als Web-Erweiterung globale Styles auf allen Websites
- Besonders schädlich ist die Verwendung eines allgemeinen CSS-Variablennamens wie
--rem
- Intern werden zufällige Klassennamen verwendet, daher ist kaum nachvollziehbar, warum ausgerechnet ein öffentlicher Name global angewendet wurde
- Der Code wird sogar eingefügt, wenn man die Erweiterung gar nicht aktiv nutzt
Fazit und Vorschlag
- Der Autor kontaktierte Grammarly; zwar kam schnell eine Antwort, er wurde aber nicht mit jemandem verbunden, der das technische Problem wirklich verstand
- Die ideale Lösung wäre, dass Grammarly einen Variablennamen wie
--🤡 verwendet und andere Entwickler --rem frei nutzen können
1 Kommentare
Hacker-News-Kommentare
Mein Problem mit Erweiterungen ist etwas anders. Wir verteilen eine Erweiterung, die das einfache Umschalten zwischen Proxy-Servern für Geolokalisierungstests ermöglicht
Wenn man Skripte oder Styles in Seiten mit unbekanntem Inhalt injiziert, ist es das Mindeste an Anstand, Variablen mit einem Namespace zu versehen
Es ist beängstigend zu sehen, wie viele Bildschirmfreigaben und Aufzeichnungen standardmäßig den grünen Eindringling auf jeder Website enthalten
Ich bin Engineer für die Grammarly Extension. Es tut mir leid, dass wir die UX von dbushell.com kaputtgemacht haben
Ich habe dieses Problem an das Engineering-Team weitergeleitet
Ich habe ein ähnliches Problem damit, dass Google Translate meine Web-App kaputtmacht
Bei der Arbeit haben wir viele Sentry-Fehler im Zusammenhang mit Browser-Erweiterungen
Ich frage mich, welche Variable das Web am stärksten kaputtmachen könnte
Ich frage mich, wie andere mit feindseligen Browser-Erweiterungen umgehen
Ich frage mich, ob man mit dieser Methode Plugins kapern kann