BrowExt - permissions & host_permissions

Unterstütze HackTricks

Grundinformationen

permissions

Berechtigungen werden in der manifest.json-Datei der Erweiterung mit der permissions-Eigenschaft definiert und erlauben den Zugriff auf fast alles, was ein Browser zugreifen kann (Cookies oder Physischer Speicher):

Das vorherige Manifest erklärt, dass die Erweiterung die storage-Berechtigung benötigt. Das bedeutet, dass sie die Storage-API verwenden kann, um ihre Daten dauerhaft zu speichern. Im Gegensatz zu Cookies oder localStorage-APIs, die den Benutzern ein gewisses Maß an Kontrolle geben, kann der Erweiterungsspeicher normalerweise nur durch Deinstallieren der Erweiterung gelöscht werden.

Eine Erweiterung wird die in ihrer manifest.json-Datei angegebenen Berechtigungen anfordern und nach der Installation der Erweiterung kannst du immer ihre Berechtigungen in deinem Browser überprüfen, wie in diesem Bild gezeigt:

Du kannst die vollständige Liste der Berechtigungen, die eine Chromium-Browsererweiterung anfordern kann, hier finden und eine vollständige Liste für Firefox-Erweiterungen hier.

host_permissions

Die optionale, aber leistungsstarke Einstellung host_permissions gibt an, mit welchen Hosts die Erweiterung über APIs wie cookies, webRequest und tabs interagieren kann.

Die folgenden host_permissions erlauben im Grunde genommen jeden Web:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

Diese sind die Hosts, auf die die Browsererweiterung frei zugreifen kann. Das liegt daran, dass eine Browsererweiterung, wenn sie fetch("https://gmail.com/") aufruft, nicht durch CORS eingeschränkt ist.

Missbrauch von permissions und host_permissions

Tabs

Darüber hinaus schaltet host_permissions auch „erweiterte“ tabs API Funktionalitäten frei. Sie ermöglichen es der Erweiterung, tabs.query() aufzurufen und nicht nur eine Liste der Browser-Tabs des Benutzers zurückzubekommen, sondern auch zu erfahren, welche Webseite (d.h. Adresse und Titel) geladen ist.

Nicht nur das, Listener wie tabs.onUpdated werden ebenfalls viel nützlicher. Diese werden benachrichtigt, wann immer eine neue Seite in einen Tab geladen wird.

Ausführen von Inhalts-Skripten

Inhalts-Skripte sind nicht unbedingt statisch im Manifest der Erweiterung geschrieben. Bei ausreichenden host_permissions können Erweiterungen sie auch dynamisch laden, indem sie tabs.executeScript() oder scripting.executeScript() aufrufen.

Beide APIs ermöglichen das Ausführen nicht nur von in den Erweiterungen enthaltenen Dateien als Inhalts-Skripte, sondern auch von beliebigem Code. Die erste erlaubt das Übergeben von JavaScript-Code als String, während die zweite eine JavaScript-Funktion erwartet, die weniger anfällig für Injektionsanfälligkeiten ist. Dennoch können beide APIs Chaos anrichten, wenn sie missbraucht werden.

Zusätzlich zu den oben genannten Fähigkeiten könnten Inhalts-Skripte beispielsweise Anmeldeinformationen abfangen, während diese in Webseiten eingegeben werden. Eine weitere klassische Möglichkeit, sie zu missbrauchen, besteht darin, Werbung auf jeder einzelnen Webseite einzufügen. Das Hinzufügen von Betrugsnachrichten, um die Glaubwürdigkeit von Nachrichtenwebseiten zu missbrauchen, ist ebenfalls möglich. Schließlich könnten sie Bank-Webseiten manipulieren, um Geldtransfers umzuleiten.

Implizite Berechtigungen

Einige Erweiterungsberechtigungen müssen nicht ausdrücklich deklariert werden. Ein Beispiel ist die tabs API: Ihre grundlegende Funktionalität ist ohne jegliche Berechtigungen zugänglich. Jede Erweiterung kann benachrichtigt werden, wenn Sie Tabs öffnen und schließen, sie wird jedoch nicht wissen, mit welcher Webseite diese Tabs übereinstimmen.

Klingt zu harmlos? Die tabs.create() API ist etwas weniger harmlos. Sie kann verwendet werden, um einen neuen Tab zu erstellen, was im Wesentlichen dasselbe ist wie window.open(), das von jeder Webseite aufgerufen werden kann. Während window.open() jedoch dem Pop-up-Blocker unterliegt, tut dies tabs.create() nicht.

Eine Erweiterung kann jederzeit beliebig viele Tabs erstellen.

Wenn Sie sich die möglichen tabs.create()-Parameter ansehen, werden Sie auch feststellen, dass ihre Fähigkeiten weit über das hinausgehen, was window.open() kontrollieren darf. Und während Firefox die Verwendung von data: URIs mit dieser API nicht zulässt, hat Chrome keinen solchen Schutz. Die Verwendung solcher URIs auf der obersten Ebene wurde wegen Missbrauchs für Phishingverboten.

tabs.update() ist sehr ähnlich wie tabs.create(), wird jedoch einen bestehenden Tab modifizieren. Eine bösartige Erweiterung kann beispielsweise willkürlich eine Werbeseite in einen Ihrer Tabs laden und den entsprechenden Tab ebenfalls aktivieren.

Webcam, Geolokalisierung und Freunde

Sie wissen wahrscheinlich, dass Webseiten spezielle Berechtigungen anfordern können, z.B. um auf Ihre Webcam (Videokonferenz-Tools) oder geografische Lage (Karten) zuzugreifen. Es sind Funktionen mit erheblichem Missbrauchspotenzial, sodass die Benutzer jedes Mal bestätigen müssen, dass sie dies weiterhin möchten.

Nicht so bei Browsererweiterungen. Wenn eine Browsererweiterung Zugriff auf Ihre Webcam oder Ihr Mikrofonwünscht, muss sie nur einmal um Erlaubnis fragen.

Typischerweise wird eine Erweiterung dies sofort nach der Installation tun. Sobald diese Aufforderung akzeptiert wird, ist der Webcam-Zugriff jederzeit möglich, selbst wenn der Benutzer zu diesem Zeitpunkt nicht mit der Erweiterung interagiert. Ja, ein Benutzer wird diese Aufforderung nur akzeptieren, wenn die Erweiterung wirklich auf die Webcam zugreifen muss. Aber danach müssen sie der Erweiterung vertrauen, dass sie nichts heimlich aufzeichnet.

Mit Zugriff auf Ihren genauen geografischen Standort oder Inhalte Ihrer Zwischenablage ist es überhaupt nicht notwendig, die Erlaubnis ausdrücklich zu erteilen. Eine Erweiterung fügt einfach geolocation oder clipboard zu dem permissions entry ihres Manifests hinzu. Diese Zugriffsberechtigungen werden dann implizit gewährt, wenn die Erweiterung installiert wird. Eine bösartige oder kompromittierte Erweiterung mit diesen Berechtigungen kann Ihr Bewegungsprofil erstellen oder Ihre Zwischenablage auf kopierte Passwörter überwachen, ohne dass Sie etwas bemerken.

Das Hinzufügen des history-Schlüsselworts zum permissions entry des Erweiterungsmanifests gewährt Zugriff auf die history API. Es ermöglicht das Abrufen des gesamten Browserverlaufs des Benutzers auf einmal, ohne darauf zu warten, dass der Benutzer diese Webseiten erneut besucht.

Die bookmarks Berechtigung hat ein ähnliches Missbrauchspotenzial, da sie das Auslesen aller Lesezeichen über die bookmarks API ermöglicht.

Speicherberechtigung

Der Erweiterungsspeicher ist lediglich eine Schlüssel-Wert-Sammlung, sehr ähnlich wie localStorage, die jede Webseite verwenden könnte. Daher sollten hier keine sensiblen Informationen gespeichert werden.

Allerdings könnten Werbefirmen auch diesen Speicher missbrauchen.

Weitere Berechtigungen

Sie finden die vollständige Liste der Berechtigungen, die eine Chromium-Browsererweiterung anfordern kann, hier und eine vollständige Liste für Firefox-Erweiterungen hier.

Prävention

Die Richtlinie von Googles Entwickler verbietet ausdrücklich, dass Erweiterungen mehr Berechtigungen anfordern, als für ihre Funktionalität erforderlich sind, wodurch übermäßige Berechtigungsanfragen effektiv gemildert werden. Ein Beispiel, bei dem eine Browsererweiterung diese Grenze überschritt, war ihre Verteilung mit dem Browser selbst anstelle über einen Add-On-Store.

Browser könnten den Missbrauch von Erweiterungsberechtigungen weiter eindämmen. Beispielsweise sind die tabCapture- und desktopCapture-APIs von Chrome, die für die Bildschirmaufnahme verwendet werden, darauf ausgelegt, Missbrauch zu minimieren. Die tabCapture-API kann nur durch direkte Benutzerinteraktion aktiviert werden, z.B. durch Klicken auf das Erweiterungssymbol, während desktopCapture die Bestätigung des Benutzers für das Aufzeichnen des Fensters erfordert, um heimliche Aufnahmeaktivitäten zu verhindern.

Allerdings führen striktere Sicherheitsmaßnahmen oft zu einer verringerten Flexibilität und Benutzerfreundlichkeit von Erweiterungen. Die activeTab-Berechtigung veranschaulicht diesen Kompromiss. Sie wurde eingeführt, um die Notwendigkeit zu beseitigen, dass Erweiterungen Hostberechtigungen im gesamten Internet anfordern, sodass Erweiterungen nur auf den aktuellen Tab zugreifen können, wenn der Benutzer dies ausdrücklich aktiviert. Dieses Modell ist effektiv für Erweiterungen, die benutzerinitiierte Aktionen erfordern, versagt jedoch bei denen, die automatische oder präventive Aktionen benötigen, wodurch Bequemlichkeit und sofortige Reaktionsfähigkeit beeinträchtigt werden.

Referenzen

Unterstützen Sie HackTricks

Last updated