BrowExt - permissions & host_permissions

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Berechtigungen

Berechtigungen werden in der Datei manifest.json der Erweiterung mit der Eigenschaft permissions definiert und ermöglichen den Zugriff auf fast alles, worauf ein Browser zugreifen kann (Cookies oder physischer Speicher):

Das vorherige Manifest erklärt, dass die Erweiterung die Berechtigung storage benötigt. Dies 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 fordert die Berechtigungen an, die in ihrer manifest.json-Datei angegeben sind, 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 jedem Web:

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

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

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

Missbrauch von permissions und host_permissions

Tabs

Darüber hinaus entsperren host_permissions auch die "fortgeschrittene" Tabs-API Funktionalität. Sie ermöglichen es der Erweiterung, tabs.query() aufzurufen und nicht nur eine Liste der Browser-Tabs des Benutzers zurückzuerhalten, sondern auch zu erfahren, welche Webseite (d.h. Adresse und Titel) geladen ist.

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

Ausführen von Inhalts-Skripten

Inhaltsskripte sind nicht unbedingt statisch in das 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 nicht nur die Ausführung von Dateien, die in den Erweiterungen als Inhalts-Skripte enthalten sind, sondern auch beliebigen Code. Ersteres ermöglicht das Übergeben von JavaScript-Code als Zeichenfolge, während letzteres eine JavaScript-Funktion erwartet, die weniger anfällig für Injektionsanfälligkeiten ist. Dennoch werden beide APIs Chaos anrichten, wenn sie missbraucht werden.

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

Implizite Berechtigungen

Einige Erweiterungsberechtigungen müssen nicht explizit 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 lediglich nicht wissen, mit welcher Website diese Tabs korrespondieren.

Klingt zu harmlos? Die tabs.create() API ist etwas weniger harmlos. Sie kann verwendet werden, um einen neuen Tab zu erstellen, im Grunde dasselbe wie window.open(), das von jeder Website aufgerufen werden kann. Während window.open() jedoch dem Pop-up-Blocker unterliegt, 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() steuern darf. Und während Firefox nicht zulässt, dass data:-URIs mit dieser API verwendet werden, hat Chrome keinen solchen Schutz. Die Verwendung solcher URIs auf der obersten Ebene wurde verboten, weil sie für Phishing missbraucht wurden.

tabs.update() ist dem tabs.create() sehr ähnlich, wird jedoch einen vorhandenen Tab ändern. So kann eine bösartige Erweiterung beispielsweise willkürlich eine Werbeseite in einem Ihrer Tabs laden und den entsprechenden Tab auch aktivieren.

Webcam, Geolokalisierung und Co.

Sie wissen wahrscheinlich, dass Websites spezielle Berechtigungen anfordern können, z. B. um auf Ihre Webcam (Videokonferenztools) oder geografischen Standort (Karten) zuzugreifen. Es sind Funktionen mit erheblichem Missbrauchspotenzial, sodass Benutzer jedes Mal bestätigen müssen, dass sie dies noch möchten.

Nicht so bei Browsererweiterungen. Wenn eine Browsererweiterung Zugriff auf Ihre Webcam oder Mikrofon** möchte, muss sie dies nur einmal um Erlaubnis bitten**

Normalerweise wird eine Erweiterung dies sofort nach der Installation tun. Sobald diese Aufforderung akzeptiert ist, ist der Zugriff auf die Webcam jederzeit möglich, auch wenn der Benutzer zu diesem Zeitpunkt nicht mit der Erweiterung interagiert. Ja, ein Benutzer wird diese Aufforderung nur akzeptieren, wenn die Erweiterung wirklich Zugriff auf die Webcam benötigt. Aber danach muss er der Erweiterung vertrauen, nichts heimlich aufzuzeichnen.

Mit Zugriff auf Ihren genauen geografischen Standort oder Inhalte Ihrer Zwischenablage ist eine explizite Genehmigung überhaupt nicht erforderlich. Eine Erweiterung fügt einfach geolocation oder clipboard zum Berechtigungseintrag in ihrem Manifest hinzu. Diese Zugriffsrechte werden dann implizit erteilt, wenn die Erweiterung installiert ist. So kann eine bösartige oder kompromittierte Erweiterung mit diesen Berechtigungen Ihr Bewegungsprofil erstellen oder Ihre Zwischenablage auf kopierte Passwörter überwachen, ohne dass Sie etwas bemerken.

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

Die bookmarks Berechtigung hat ein ähnliches Missbrauchspotenzial, sie ermöglicht es, alle Lesezeichen über die Bookmarks-API auszulesen.

Speicherberechtigung

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

Jedoch könnten auch Werbeunternehmen 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.

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated