BrowExt - Berechtigungen & host_permissions

Reading time: 9 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie 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 Deinstallation der Erweiterung gelöscht werden.

Eine Erweiterung wird die in ihrer manifest.json-Datei angegebenen Berechtigungen anfordern, und nach der Installation der Erweiterung können Sie immer ihre Berechtigungen in Ihrem Browser überprüfen, wie in diesem Bild gezeigt:

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.

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 jeden Web:

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

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

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

Diese sind die Hosts, auf die die Browsererweiterung frei zugreifen kann. Dies liegt daran, dass eine Browsererweiterung fetch("https://gmail.com/") aufruft, ohne durch CORS eingeschränkt zu sein.

Missbrauch von permissions und host_permissions

Tabs

Darüber hinaus schaltet host_permissions auch die "erweiterte" tabs API Funktionalität frei. Sie ermöglichen 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.

caution

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 Erweiterungsmanifest 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.

caution

Neben den oben genannten Möglichkeiten 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 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 Popup-Blocker unterliegt, tut dies tabs.create() nicht.

caution

Eine Erweiterung kann jederzeit beliebig viele Tabs erstellen.

Wenn Sie sich die möglichen tabs.create()-Parameter ansehen, werden Sie auch feststellen, dass ihre Möglichkeiten 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 verboten, da sie für Phishing missbraucht wurden.

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 Standortdaten (Karten) zuzugreifen. Es sind Funktionen mit erheblichem Missbrauchspotenzial, sodass die Benutzer jedes Mal bestätigen müssen, dass sie dies weiterhin möchten.

caution

Bei Browsererweiterungen ist das nicht so. Wenn eine Browsererweiterung Zugriff auf Ihre Webcam oder Ihr Mikrofon möchte, muss sie nur einmal um Erlaubnis fragen.

Typischerweise geschieht dies sofort nach der Installation einer Erweiterung. 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 nicht einmal notwendig, die Erlaubnis ausdrücklich zu erteilen. Eine Erweiterung fügt einfach geolocation oder clipboard zu der 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 zur 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, was übermäßige Berechtigungsanfragen effektiv mindert. Ein Beispiel, bei dem eine Browsererweiterung diese Grenze überschritt, war ihre Verteilung mit dem Browser selbst und nicht über einen Add-On-Store.

Browser könnten den Missbrauch von Erweiterungsberechtigungen weiter eindämmen. Beispielsweise sind Chome's tabCapture und desktopCapture APIs, 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 Benutzerbestätigung 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 permission 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

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks