mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['pentesting-web/browser-extension-pentesting-methodology/REA
This commit is contained in:
parent
cad98a0412
commit
8c3ab97cbd
1 changed files with 116 additions and 52 deletions
|
@ -1,8 +1,8 @@
|
|||
# Browser Extension Pentesting Methodology
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -33,7 +33,7 @@ Jedes Inhalts-Skript hat direkten Zugriff auf das DOM einer **einzelnen Webseite
|
|||
|
||||
Der Erweiterungskern enthält die meisten Berechtigungen/Zugriffe der Erweiterung, kann jedoch nur über [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) und Inhalts-Skripte mit Webinhalten interagieren. Außerdem hat der Erweiterungskern keinen direkten Zugriff auf die Hostmaschine.
|
||||
|
||||
### **Native Binärdatei**
|
||||
### **Native Binary**
|
||||
|
||||
Die Erweiterung erlaubt eine native Binärdatei, die **auf die Hostmaschine mit den vollständigen Berechtigungen des Benutzers zugreifen kann.** Die native Binärdatei interagiert über die standardmäßige Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)), die von Flash und anderen Browser-Plug-ins verwendet wird, mit dem Erweiterungskern.
|
||||
|
||||
|
@ -169,7 +169,7 @@ files: ["content-script.js"]
|
|||
});
|
||||
});
|
||||
```
|
||||
* **Funktion beim Klicken injizieren:**
|
||||
* **Funktion bei Klick injizieren:**
|
||||
```javascript
|
||||
//service-worker.js - Inject a function
|
||||
function injectedFunction() {
|
||||
|
@ -235,13 +235,13 @@ js : [ "contentScript.js" ],
|
|||
```
|
||||
### `background`
|
||||
|
||||
Nachrichten, die von Inhalts-Skripten gesendet werden, werden von der **Hintergrundseite** empfangen, die eine zentrale Rolle bei der Koordination der Komponenten der Erweiterung spielt. Bemerkenswerterweise bleibt die Hintergrundseite während der gesamten Lebensdauer der Erweiterung bestehen und arbeitet diskret ohne direkte Benutzerinteraktion. Sie verfügt über ihr eigenes Document Object Model (DOM), das komplexe Interaktionen und Zustandsmanagement ermöglicht.
|
||||
Nachrichten, die von Inhalts-Skripten gesendet werden, werden von der **Hintergrundseite** empfangen, die eine zentrale Rolle bei der Koordination der Komponenten der Erweiterung spielt. Bemerkenswerterweise bleibt die Hintergrundseite während der gesamten Lebensdauer der Erweiterung bestehen und arbeitet diskret ohne direkte Benutzerinteraktion. Sie verfügt über ihr eigenes Document Object Model (DOM), das komplexe Interaktionen und Zustandsverwaltung ermöglicht.
|
||||
|
||||
**Wichtige Punkte**:
|
||||
|
||||
* **Rolle der Hintergrundseite:** Dient als Nervenzentrum für die Erweiterung und gewährleistet die Kommunikation und Koordination zwischen den verschiedenen Teilen der Erweiterung.
|
||||
* **Rolle der Hintergrundseite:** Dient als Nervenzentrum für die Erweiterung und gewährleistet Kommunikation und Koordination zwischen den verschiedenen Teilen der Erweiterung.
|
||||
* **Persistenz:** Es ist eine ständig präsente Entität, die für den Benutzer unsichtbar, aber für die Funktionalität der Erweiterung unerlässlich ist.
|
||||
* **Automatische Generierung:** Wenn nicht ausdrücklich definiert, erstellt der Browser automatisch eine Hintergrundseite. Diese automatisch generierte Seite enthält alle Hintergrundskripte, die im Manifest der Erweiterung angegeben sind, und gewährleistet den nahtlosen Betrieb der Hintergrundaufgaben der Erweiterung.
|
||||
* **Automatische Generierung:** Wenn nicht ausdrücklich definiert, wird der Browser automatisch eine Hintergrundseite erstellen. Diese automatisch generierte Seite enthält alle Hintergrundskripte, die im Manifest der Erweiterung angegeben sind, und gewährleistet den nahtlosen Betrieb der Hintergrundaufgaben der Erweiterung.
|
||||
|
||||
{% hint style="success" %}
|
||||
Der Komfort, den der Browser bei der automatischen Generierung einer Hintergrundseite (wenn nicht ausdrücklich deklariert) bietet, stellt sicher, dass alle notwendigen Hintergrundskripte integriert und betriebsbereit sind, was den Einrichtungsprozess der Erweiterung vereinfacht.
|
||||
|
@ -292,7 +292,7 @@ Da Browsererweiterungen so **privilegiert** sein können, könnte eine bösartig
|
|||
|
||||
### `content_security_policy`
|
||||
|
||||
Eine **Content-Sicherheitsrichtlinie** kann ebenfalls in der `manifest.json` deklariert werden. Wenn eine definiert ist, könnte sie **anfällig** sein.
|
||||
Eine **Content-Sicherheitsrichtlinie** kann auch innerhalb der `manifest.json` deklariert werden. Wenn eine definiert ist, könnte sie **anfällig** sein.
|
||||
|
||||
Die Standardeinstellung für Seiten von Browsererweiterungen ist eher restriktiv:
|
||||
```bash
|
||||
|
@ -338,7 +338,7 @@ Wenn jedoch der `manifest.json` Parameter **`use_dynamic_url`** verwendet wird,
|
|||
Beachten Sie, dass selbst wenn eine Seite hier erwähnt wird, sie möglicherweise **gegen ClickJacking geschützt** ist, dank der **Content Security Policy**. Daher müssen Sie dies auch überprüfen (frame-ancestors Abschnitt), bevor Sie bestätigen, dass ein ClickJacking-Angriff möglich ist.
|
||||
{% endhint %}
|
||||
|
||||
Der Zugriff auf diese Seiten macht diese Seiten **potenziell anfällig für ClickJacking**:
|
||||
Der Zugriff auf diese Seiten macht sie **potenziell anfällig für ClickJacking**:
|
||||
|
||||
{% content-ref url="browext-clickjacking.md" %}
|
||||
[browext-clickjacking.md](browext-clickjacking.md)
|
||||
|
@ -386,9 +386,9 @@ Um zwischen dem Content-Skript und der Webseite zu kommunizieren, werden normale
|
|||
|
||||
### Innerhalb der Erweiterung
|
||||
|
||||
Normalerweise wird die Funktion **`chrome.runtime.sendMessage`** verwendet, um eine Nachricht innerhalb der Erweiterung zu senden (normalerweise vom `background`-Skript verarbeitet), und um sie zu empfangen und zu verarbeiten, wird ein Listener deklariert, der **`chrome.runtime.onMessage.addListener`** aufruft.
|
||||
Normalerweise wird die Funktion **`chrome.runtime.sendMessage`** verwendet, um eine Nachricht innerhalb der Erweiterung zu senden (normalerweise vom `background`-Skript verarbeitet) und um sie zu empfangen und zu verarbeiten, wird ein Listener deklariert, der **`chrome.runtime.onMessage.addListener`** aufruft.
|
||||
|
||||
Es ist auch möglich, **`chrome.runtime.connect()`** zu verwenden, um eine persistente Verbindung anstelle von einzelnen Nachrichten zu haben. Es ist möglich, es zu verwenden, um **Nachrichten** zu **senden** und **zu empfangen**, wie im folgenden Beispiel:
|
||||
Es ist auch möglich, **`chrome.runtime.connect()`** zu verwenden, um eine persistente Verbindung anstelle von einzelnen Nachrichten zu senden. Es ist möglich, es zu verwenden, um **Nachrichten** zu **senden** und **zu empfangen**, wie im folgenden Beispiel:
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -429,9 +429,21 @@ chrome.runtime.sendMessage(extensionId, ...
|
|||
```
|
||||
Wo es notwendig ist, die **Erweiterungs-ID** zu erwähnen.
|
||||
|
||||
## Web **↔︎** Kommunikation zwischen Inhalts-Skripten
|
||||
### Native Messaging
|
||||
|
||||
Die Umgebungen, in denen **Inhalts-Skripte** arbeiten und wo die Host-Seiten existieren, sind **getrennt** voneinander, was **Isolation** gewährleistet. Trotz dieser Isolation haben beide die Möglichkeit, mit dem **Document Object Model (DOM)** der Seite zu interagieren, einer gemeinsamen Ressource. Damit die Host-Seite mit dem **Inhalts-Skript** oder indirekt über das Inhalts-Skript mit der Erweiterung kommunizieren kann, ist es erforderlich, das **DOM** zu nutzen, das für beide Parteien als Kommunikationskanal zugänglich ist.
|
||||
Es ist möglich, dass die Hintergrundskripte mit Binärdateien im System kommunizieren, die **anfällig für kritische Sicherheitsanfälligkeiten wie RCEs** sein könnten, wenn diese Kommunikation nicht ordnungsgemäß gesichert ist. [Mehr dazu später](./#native-messaging).
|
||||
```javascript
|
||||
chrome.runtime.sendNativeMessage(
|
||||
'com.my_company.my_application',
|
||||
{text: 'Hello'},
|
||||
function (response) {
|
||||
console.log('Received ' + response);
|
||||
}
|
||||
);
|
||||
```
|
||||
## Web **↔︎** Kommunikation zwischen Content-Skripten
|
||||
|
||||
Die Umgebungen, in denen **Content-Skripte** arbeiten und wo die Host-Seiten existieren, sind **getrennt** voneinander, was **Isolation** gewährleistet. Trotz dieser Isolation haben beide die Möglichkeit, mit dem **Document Object Model (DOM)** der Seite zu interagieren, einer gemeinsamen Ressource. Damit die Host-Seite mit dem **Content-Skript** oder indirekt mit der Erweiterung über das Content-Skript kommunizieren kann, ist es erforderlich, das **DOM** zu nutzen, das für beide Parteien als Kommunikationskanal zugänglich ist.
|
||||
|
||||
### Post-Nachrichten
|
||||
|
||||
|
@ -490,7 +502,7 @@ Ein weiterer möglicher Kommunikationsweg könnte über **Iframe-URLs** erfolgen
|
|||
|
||||
Dies ist nicht "genau" ein Kommunikationsweg, aber das **Web und das Inhalts-Skript haben Zugriff auf das Web-DOM**. Wenn das **Inhalts-Skript** also Informationen daraus liest und das **Web-DOM** vertraut, könnte das Web diese Daten **modifizieren** (weil das Web nicht vertraut werden sollte oder weil das Web anfällig für XSS ist) und das **Inhalts-Skript** **kompromittieren**.
|
||||
|
||||
Ein Beispiel für ein **DOM-basiertes XSS zur Kompromittierung einer Browsererweiterung** finden Sie auch in:
|
||||
Ein Beispiel für ein **DOM-basiertes XSS zur Kompromittierung einer Browsererweiterung** finden Sie in:
|
||||
|
||||
{% content-ref url="browext-xss-example.md" %}
|
||||
[browext-xss-example.md](browext-xss-example.md)
|
||||
|
@ -510,7 +522,7 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
|
|||
console.log(response);
|
||||
})();
|
||||
```
|
||||
Senden einer Anfrage von der **Erweiterung** (normalerweise einem **Hintergrundskript**). Beispiel, wie man eine Nachricht an das Inhaltskript im ausgewählten Tab sendet:
|
||||
Eine Anfrage von der **Erweiterung** senden (normalerweise ein **Hintergrundskript**). Beispiel, wie man eine Nachricht an das Inhaltskript im ausgewählten Tab sendet:
|
||||
```javascript
|
||||
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
||||
(async () => {
|
||||
|
@ -520,7 +532,7 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
|
|||
console.log(response);
|
||||
})();
|
||||
```
|
||||
Am **empfangenden Ende** müssen Sie einen [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **Ereignis-Listener** einrichten, um die Nachricht zu verarbeiten. Dies sieht sowohl von einem Inhalts-Skript als auch von einer Erweiterungsseite gleich aus.
|
||||
Am **empfangenden Ende** müssen Sie einen [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **Ereignis-Listener** einrichten, um die Nachricht zu verarbeiten. Dies sieht sowohl aus einem Inhalts-Skript als auch von einer Erweiterungsseite gleich aus.
|
||||
```javascript
|
||||
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
||||
chrome.runtime.onMessage.addListener(
|
||||
|
@ -539,25 +551,64 @@ Eine wichtige Überlegung ist, dass in Szenarien, in denen mehrere Seiten `onMes
|
|||
|
||||
Beim Erstellen neuer Erweiterungen sollte die Präferenz auf Promises anstelle von Callbacks liegen. In Bezug auf die Verwendung von Callbacks wird die Funktion `sendResponse()` nur dann als gültig angesehen, wenn sie direkt im synchronen Kontext ausgeführt wird oder wenn der Ereignis-Handler eine asynchrone Operation anzeigt, indem er `true` zurückgibt. Sollten keine der Handler `true` zurückgeben oder wenn die Funktion `sendResponse()` aus dem Speicher entfernt wird (garbage-collected), wird der mit der Funktion `sendMessage()` verbundene Callback standardmäßig ausgelöst.
|
||||
|
||||
## Native Messaging
|
||||
|
||||
Browsererweiterungen ermöglichen auch die Kommunikation mit **Binaries im System über stdin**. Die Anwendung muss ein JSON installieren, das dies in einem JSON wie folgt angibt:
|
||||
```json
|
||||
{
|
||||
"name": "com.my_company.my_application",
|
||||
"description": "My Application",
|
||||
"path": "C:\\Program Files\\My Application\\chrome_native_messaging_host.exe",
|
||||
"type": "stdio",
|
||||
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
|
||||
}
|
||||
```
|
||||
Wo der `name` der String ist, der an [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) oder [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) übergeben wird, um mit der Anwendung von den Hintergrundskripten der Browsererweiterung zu kommunizieren. Der `path` ist der Pfad zur Binärdatei, es gibt nur 1 gültigen `type`, der stdio ist (verwende stdin und stdout) und die `allowed_origins` geben die Erweiterungen an, die darauf zugreifen können (und dürfen kein Wildcard haben).
|
||||
|
||||
Chrome/Chromium wird nach diesem JSON in einigen Windows-Registrierungen und einigen Pfaden in macOS und Linux suchen (weitere Informationen in den [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
|
||||
|
||||
{% hint style="success" %}
|
||||
Die Browsererweiterung benötigt auch die `nativeMessaing`-Berechtigung, um diese Kommunikation nutzen zu können.
|
||||
{% endhint %}
|
||||
|
||||
So sieht ein Hintergrundskriptcode aus, der Nachrichten an eine native Anwendung sendet:
|
||||
```javascript
|
||||
chrome.runtime.sendNativeMessage(
|
||||
'com.my_company.my_application',
|
||||
{text: 'Hello'},
|
||||
function (response) {
|
||||
console.log('Received ' + response);
|
||||
}
|
||||
);
|
||||
```
|
||||
In [**diesem Blogbeitrag**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/) wird ein verwundbares Muster vorgeschlagen, das native Nachrichten missbraucht:
|
||||
|
||||
1. Die Browsererweiterung hat ein Wildcard-Muster für das Inhalts-Skript.
|
||||
2. Das Inhalts-Skript überträgt `postMessage`-Nachrichten an das Hintergrund-Skript mit `sendMessage`.
|
||||
3. Das Hintergrund-Skript überträgt die Nachricht an die native Anwendung mit `sendNativeMessage`.
|
||||
4. Die native Anwendung verarbeitet die Nachricht gefährlich, was zu einer Codeausführung führt.
|
||||
|
||||
Und darin wird ein Beispiel für **den Übergang von jeder Seite zu RCE unter Ausnutzung einer Browsererweiterung erklärt**.
|
||||
|
||||
## Sensible Informationen im Speicher/Code/Clipboard
|
||||
|
||||
Wenn eine Browsererweiterung **sensible Informationen im Speicher speichert**, könnten diese **dumped** (insbesondere auf Windows-Maschinen) und nach diesen Informationen **gesucht** werden.
|
||||
Wenn eine Browsererweiterung **sensible Informationen im Speicher speichert**, könnten diese **ausgelesen** werden (insbesondere auf Windows-Maschinen) und nach diesen Informationen **gesucht** werden.
|
||||
|
||||
Daher **sollte der Speicher der Browsererweiterung nicht als sicher betrachtet werden** und **sensible Informationen** wie Anmeldeinformationen oder mnemonische Phrasen **sollten nicht gespeichert werden**.
|
||||
Daher sollte der Speicher der Browsererweiterung **nicht als sicher betrachtet werden** und **sensible Informationen** wie Anmeldeinformationen oder mnemonische Phrasen **sollten nicht gespeichert werden**.
|
||||
|
||||
Natürlich **sollten keine sensiblen Informationen im Code platziert werden**, da sie **öffentlich** sein werden.
|
||||
Natürlich sollten **keine sensiblen Informationen im Code platziert werden**, da sie **öffentlich** sein werden.
|
||||
|
||||
Um den Speicher des Browsers zu dumpen, könnten Sie **den Prozessspeicher dumpen** oder zu den **Einstellungen** der Browsererweiterung gehen, auf **`Inspect pop-up`** klicken -> Im **`Memory`**-Bereich -> **`Take a snapshot`** und **`CTRL+F`** verwenden, um im Snapshot nach sensiblen Informationen zu suchen.
|
||||
Um den Speicher des Browsers auszulesen, könnten Sie **den Prozessspeicher auslesen** oder zu den **Einstellungen** der Browsererweiterung gehen, auf **`Pop-up inspizieren`** klicken -> Im **`Speicher`**-Bereich -> **`Snapshot erstellen`** und **`STRG+F`** verwenden, um im Snapshot nach sensiblen Informationen zu suchen.
|
||||
|
||||
Darüber hinaus **sollten hochsensible Informationen wie mnemonische Schlüssel oder Passwörter nicht in die Zwischenablage kopiert werden** (oder zumindest sollten sie in wenigen Sekunden aus der Zwischenablage entfernt werden), da Prozesse, die die Zwischenablage überwachen, sie dann erhalten können.
|
||||
Darüber hinaus sollten hochsensible Informationen wie mnemonische Schlüssel oder Passwörter **nicht in die Zwischenablage kopiert werden dürfen** (oder zumindest innerhalb weniger Sekunden aus der Zwischenablage entfernt werden), da Prozesse, die die Zwischenablage überwachen, sie dann erhalten können.
|
||||
|
||||
## Laden einer Erweiterung im Browser
|
||||
|
||||
1. **Laden** Sie die Browsererweiterung & entpacken Sie sie
|
||||
2. Gehen Sie zu **`chrome://extensions/`** und **aktivieren** Sie den `Entwicklermodus`
|
||||
3. Klicken Sie auf die Schaltfläche **`Entpackte Erweiterung laden`**
|
||||
1. **Laden** Sie die Browsererweiterung herunter und entpacken Sie sie.
|
||||
2. Gehen Sie zu **`chrome://extensions/`** und **aktivieren** Sie den `Entwicklermodus`.
|
||||
3. Klicken Sie auf die Schaltfläche **`Entpackte Erweiterung laden`**.
|
||||
|
||||
In **Firefox** gehen Sie zu **`about:debugging#/runtime/this-firefox`** und klicken auf die Schaltfläche **`Temporäre Add-on laden`**.
|
||||
In **Firefox** gehen Sie zu **`about:debugging#/runtime/this-firefox`** und klicken auf die Schaltfläche **`Temporäre Erweiterung laden`**.
|
||||
|
||||
## Den Quellcode aus dem Store abrufen
|
||||
|
||||
|
@ -565,7 +616,7 @@ Der Quellcode einer Chrome-Erweiterung kann auf verschiedene Weise abgerufen wer
|
|||
|
||||
### Erweiterung als ZIP über die Befehlszeile herunterladen
|
||||
|
||||
Der Quellcode einer Chrome-Erweiterung kann als ZIP-Datei über die Befehlszeile heruntergeladen werden. Dies beinhaltet die Verwendung von `curl`, um die ZIP-Datei von einer bestimmten URL abzurufen und dann den Inhalt der ZIP-Datei in ein Verzeichnis zu extrahieren. Hier sind die Schritte:
|
||||
Der Quellcode einer Chrome-Erweiterung kann über die Befehlszeile als ZIP-Datei heruntergeladen werden. Dies beinhaltet die Verwendung von `curl`, um die ZIP-Datei von einer bestimmten URL abzurufen und dann den Inhalt der ZIP-Datei in ein Verzeichnis zu extrahieren. Hier sind die Schritte:
|
||||
|
||||
1. Ersetzen Sie `"extension_id"` durch die tatsächliche ID der Erweiterung.
|
||||
2. Führen Sie die folgenden Befehle aus:
|
||||
|
@ -580,46 +631,59 @@ unzip -d "$extension_id-source" "$extension_id.zip"
|
|||
|
||||
### Verwenden Sie die CRX Viewer-Erweiterung
|
||||
|
||||
Eine weitere praktische Methode ist die Verwendung des Chrome Extension Source Viewer, einem Open-Source-Projekt. Es kann aus dem [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) installiert werden. Der Quellcode des Viewers ist in seinem [GitHub-Repository](https://github.com/Rob--W/crxviewer) verfügbar.
|
||||
Eine weitere praktische Methode ist die Verwendung des Chrome Extension Source Viewers, einem Open-Source-Projekt. Es kann aus dem [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) installiert werden. Der Quellcode des Viewers ist in seinem [GitHub-Repository](https://github.com/Rob--W/crxviewer) verfügbar.
|
||||
|
||||
### Quellcode der lokal installierten Erweiterung anzeigen
|
||||
|
||||
Chrome-Erweiterungen, die lokal installiert sind, können ebenfalls inspiziert werden. So geht's:
|
||||
|
||||
1. Greifen Sie auf Ihr lokales Chrome-Profilverzeichnis zu, indem Sie `chrome://version/` besuchen und das Feld "Profilpfad" suchen.
|
||||
1. Greifen Sie auf Ihr lokales Chrome-Profilverzeichnis zu, indem Sie `chrome://version/` besuchen und das Feld "Profilpfad" finden.
|
||||
2. Navigieren Sie zum Unterordner `Extensions/` innerhalb des Profilverzeichnisses.
|
||||
3. Dieser Ordner enthält alle installierten Erweiterungen, typischerweise mit ihrem Quellcode in einem lesbaren Format.
|
||||
|
||||
Um Erweiterungen zu identifizieren, können Sie ihre IDs den Namen zuordnen:
|
||||
Um Erweiterungen zu identifizieren, können Sie deren IDs den Namen zuordnen:
|
||||
|
||||
* Aktivieren Sie den Entwicklermodus auf der Seite `about:extensions`, um die IDs jeder Erweiterung zu sehen.
|
||||
* Innerhalb des Ordners jeder Erweiterung enthält die Datei `manifest.json` ein lesbares `name`-Feld, das Ihnen hilft, die Erweiterung zu identifizieren.
|
||||
|
||||
### Verwenden Sie einen Dateiarchivierer oder -depacker
|
||||
### Verwenden Sie einen Dateiarchivier oder -depacker
|
||||
|
||||
Gehen Sie zum Chrome Web Store und laden Sie die Erweiterung herunter. Die Datei hat die Erweiterung `.crx`. Ändern Sie die Dateierweiterung von `.crx` in `.zip`. Verwenden Sie einen beliebigen Dateiarchivierer (wie WinRAR, 7-Zip usw.), um den Inhalt der ZIP-Datei zu extrahieren.
|
||||
Gehen Sie zum Chrome Web Store und laden Sie die Erweiterung herunter. Die Datei hat die Erweiterung `.crx`. Ändern Sie die Dateierweiterung von `.crx` in `.zip`. Verwenden Sie einen beliebigen Dateiarchivier (wie WinRAR, 7-Zip usw.), um den Inhalt der ZIP-Datei zu extrahieren.
|
||||
|
||||
### Entwicklermodus in Chrome verwenden
|
||||
|
||||
Öffnen Sie Chrome und gehen Sie zu `chrome://extensions/`. Aktivieren Sie "Entwicklermodus" oben rechts. Klicken Sie auf "Entpackte Erweiterung laden...". Navigieren Sie zum Verzeichnis Ihrer Erweiterung. Dies lädt den Quellcode nicht herunter, ist jedoch nützlich, um den Code einer bereits heruntergeladenen oder entwickelten Erweiterung anzuzeigen und zu ändern.
|
||||
|
||||
## Chrome-Erweiterungsmanifest-Datensatz
|
||||
|
||||
Um zu versuchen, anfällige Browsererweiterungen zu erkennen, können Sie das [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) verwenden und deren Manifestdateien auf potenziell anfällige Anzeichen überprüfen. Zum Beispiel, um nach Erweiterungen mit mehr als 25000 Benutzern, `content_scripts` und der Berechtigung `nativeMessaging` zu suchen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
|
||||
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Sicherheitsprüfliste
|
||||
|
||||
Obwohl Browsererweiterungen eine **begrenzte Angriffsfläche** haben, können einige von ihnen **Schwachstellen** oder **potenzielle Verbesserungen der Härtung** enthalten. Die folgenden sind die häufigsten:
|
||||
Obwohl Browsererweiterungen eine **begrenzte Angriffsfläche** haben, können einige von ihnen **Schwachstellen** oder **potenzielle Verbesserungen** aufweisen. Die folgenden sind die häufigsten:
|
||||
|
||||
* [ ] **Beschränken** Sie so weit wie möglich angeforderte **`permissions`**
|
||||
* [ ] **Beschränken** Sie so weit wie möglich **`host_permissions`**
|
||||
* [ ] **Berechtigungen** so weit wie möglich **einschränken**
|
||||
* [ ] **Host-Berechtigungen** so weit wie möglich **einschränken**
|
||||
* [ ] Verwenden Sie eine **starke** **`content_security_policy`**
|
||||
* [ ] **Beschränken** Sie so weit wie möglich die **`externally_connectable`**, wenn keine benötigt wird und möglich ist, lassen Sie es nicht standardmäßig, geben Sie **`{}`** an
|
||||
* [ ] **Einschränken** Sie so weit wie möglich die **`externally_connectable`**, wenn keine benötigt wird und möglich ist, lassen Sie es nicht standardmäßig, geben Sie **`{}`** an
|
||||
* [ ] Wenn hier eine **URL, die anfällig für XSS oder Übernahme ist**, erwähnt wird, kann ein Angreifer **Nachrichten direkt an die Hintergrundskripte senden**. Sehr mächtiger Umgehung.
|
||||
* [ ] **Beschränken** Sie so weit wie möglich die **`web_accessible_resources`**, sogar leer, wenn möglich.
|
||||
* [ ] Wenn **`web_accessible_resources`** nicht leer ist, überprüfen Sie auf [**ClickJacking**](browext-clickjacking.md)
|
||||
* [ ] **Einschränken** Sie so weit wie möglich die **`web_accessible_resources`**, sogar leer, wenn möglich.
|
||||
* [ ] Wenn **`web_accessible_resources`** nicht leer ist, überprüfen Sie [**ClickJacking**](browext-clickjacking.md)
|
||||
* [ ] Wenn eine **Kommunikation** von der **Erweiterung** zur **Webseite** erfolgt, [**überprüfen Sie auf XSS**](browext-xss-example.md) **Schwachstellen**, die in der Kommunikation verursacht werden.
|
||||
* [ ] Wenn Post-Nachrichten verwendet werden, überprüfen Sie auf [**Post-Nachrichten-Schwachstellen**](../postmessage-vulnerabilities/)**.**
|
||||
* [ ] Wenn das **Content-Skript auf DOM-Details zugreift**, überprüfen Sie, ob sie **kein XSS einführen**, wenn sie vom Web **modifiziert** werden
|
||||
* [ ] Legen Sie besonderen Wert darauf, ob diese Kommunikation auch an der **Content-Skript -> Hintergrundskript-Kommunikation** beteiligt ist
|
||||
* [ ] Wenn das **Inhalts-Skript auf DOM-Details zugreift**, überprüfen Sie, ob sie **kein XSS einführen**, wenn sie von der Webseite **modifiziert** werden
|
||||
* [ ] Legen Sie besonderen Wert darauf, wenn diese Kommunikation auch an der **Kommunikation zwischen Inhalts-Skript und Hintergrundskript** beteiligt ist
|
||||
* [ ] Wenn das Hintergrundskript über **native Messaging** kommuniziert, überprüfen Sie, ob die Kommunikation sicher und bereinigt ist
|
||||
* [ ] **Sensible Informationen sollten nicht** im Code der Browsererweiterung **gespeichert werden**
|
||||
* [ ] **Sensible Informationen sollten nicht** im Speicher der Browsererweiterung **gespeichert werden**
|
||||
* [ ] **Sensible Informationen sollten nicht** im **Dateisystem ungeschützt** gespeichert werden
|
||||
|
||||
## Werkzeuge
|
||||
|
||||
|
@ -628,24 +692,24 @@ Obwohl Browsererweiterungen eine **begrenzte Angriffsfläche** haben, können ei
|
|||
* Zieht jede Chrome-Erweiterung von einem bereitgestellten Chrome-Webstore-Link.
|
||||
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **Viewer**: zeigt einfach eine JSON-hübsch formatierte Version des Manifests der Erweiterung an.
|
||||
* **Fingerprint-Analyse**: Erkennung von [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) und automatische Generierung von JavaScript zur Fingerabdruckerkennung von Chrome-Erweiterungen.
|
||||
* **Potenzielle Clickjacking-Analyse**: Erkennung von HTML-Seiten der Erweiterung mit der Direktive [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources). Diese sind potenziell anfällig für Clickjacking, abhängig vom Zweck der Seiten.
|
||||
* **Berechtigungswarnungen-Viewer**: zeigt eine Liste aller Chrome-Berechtigungsaufforderungswarnungen an, die angezeigt werden, wenn ein Benutzer versucht, die Erweiterung zu installieren.
|
||||
* **Potenzielle Clickjacking-Analyse**: Erkennung von HTML-Seiten der Erweiterung mit der **web\_accessible\_resources**-Richtlinie. Diese sind potenziell anfällig für Clickjacking, abhängig vom Zweck der Seiten.
|
||||
* **Berechtigungswarnungen Viewer**: zeigt eine Liste aller Chrome-Berechtigungsaufforderungswarnungen, die angezeigt werden, wenn ein Benutzer versucht, die Erweiterung zu installieren.
|
||||
* **Gefährliche Funktion(en)**: zeigt den Standort gefährlicher Funktionen, die potenziell von einem Angreifer ausgenutzt werden könnten (z. B. Funktionen wie innerHTML, chrome.tabs.executeScript).
|
||||
* **Einstiegspunkt(e)**: zeigt, wo die Erweiterung Benutzereingaben oder externe Eingaben erhält. Dies ist nützlich, um die Angriffsfläche einer Erweiterung zu verstehen und potenzielle Punkte zu finden, um bösartig gestaltete Daten an die Erweiterung zu senden.
|
||||
* Sowohl die Scanner für gefährliche Funktionen als auch die für Einstiegspunkte haben Folgendes für ihre generierten Warnungen:
|
||||
* **Einstiegspunkt(e)**: zeigt, wo die Erweiterung Benutzereingaben oder externe Eingaben entgegennimmt. Dies ist nützlich, um die Angriffsfläche einer Erweiterung zu verstehen und nach potenziellen Punkten zu suchen, um bösartig gestaltete Daten an die Erweiterung zu senden.
|
||||
* Sowohl die Scanner für gefährliche Funktion(en) als auch Einstiegspunkt(e) haben Folgendes für ihre generierten Warnungen:
|
||||
* Relevanter Codeausschnitt und Zeile, die die Warnung verursacht hat.
|
||||
* Beschreibung des Problems.
|
||||
* Eine Schaltfläche "Datei anzeigen", um die vollständige Quelldatei mit dem Code anzuzeigen.
|
||||
* Eine Schaltfläche „Datei anzeigen“, um die vollständige Quelldatei mit dem Code anzuzeigen.
|
||||
* Der Pfad der gewarnten Datei.
|
||||
* Die vollständige Chrome-Erweiterungs-URI der gewarnten Datei.
|
||||
* Den Typ der Datei, z. B. ein Hintergrundseiten-Skript, Content-Skript, Browser-Aktion usw.
|
||||
* Den Typ der Datei, z. B. ein Hintergrundseiten-Skript, Inhalts-Skript, Browser-Aktion usw.
|
||||
* Wenn die anfällige Zeile in einer JavaScript-Datei ist, die Pfade aller Seiten, auf denen sie enthalten ist, sowie den Typ dieser Seiten und den Status der [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources).
|
||||
* **Content Security Policy (CSP)-Analyzer und Umgehungsprüfer**: Dies weist auf Schwächen in der CSP Ihrer Erweiterung hin und zeigt auch potenzielle Möglichkeiten zur Umgehung Ihrer CSP aufgrund von aufgelisteten CDNs usw.
|
||||
* **Content Security Policy (CSP) Analyzer und Umgehungsprüfer**: Dies wird Schwächen in der CSP Ihrer Erweiterung aufzeigen und auch potenzielle Möglichkeiten zur Umgehung Ihrer CSP aufgrund von aufgelisteten CDNs usw. aufzeigen.
|
||||
* **Bekannte anfällige Bibliotheken**: Dies verwendet [Retire.js](https://retirejs.github.io/retire.js/), um die Verwendung bekannter anfälliger JavaScript-Bibliotheken zu überprüfen.
|
||||
* Erweiterung und formatierte Versionen herunterladen.
|
||||
* Die ursprüngliche Erweiterung herunterladen.
|
||||
* Eine verschönerte Version der Erweiterung herunterladen (automatisch hübsch formatierte HTML- und JavaScript-Dateien).
|
||||
* Automatische Zwischenspeicherung der Scanergebnisse, das Ausführen eines Erweiterungsscans dauert beim ersten Mal eine gute Zeit. Beim zweiten Mal, vorausgesetzt, die Erweiterung wurde nicht aktualisiert, wird es aufgrund der zwischengespeicherten Ergebnisse fast sofort sein.
|
||||
* Die originale Erweiterung herunterladen.
|
||||
* Eine verschönerte Version der Erweiterung herunterladen (automatisch hübsch formatierte HTML- und JavaScript).
|
||||
* Automatische Zwischenspeicherung der Scannergebnisse, das Ausführen eines Erweiterungsscans dauert beim ersten Ausführen eine gute Zeit. Beim zweiten Mal, vorausgesetzt, die Erweiterung wurde nicht aktualisiert, wird es fast sofort sein, da die Ergebnisse zwischengespeichert werden.
|
||||
* Verlinkbare Bericht-URLs, um jemand anderem leicht einen von Tarnish generierten Erweiterungsbericht zu verlinken.
|
||||
|
||||
### [Neto](https://github.com/elevenpaths/neto)
|
||||
|
@ -666,12 +730,12 @@ Projekt Neto ist ein Python 3-Paket, das entwickelt wurde, um versteckte Funktio
|
|||
* [https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0](https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0)
|
||||
|
||||
{% hint style="success" %}
|
||||
Lernen & üben Sie AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lernen & üben Sie GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Lernen & üben Sie AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lernen & üben Sie GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Unterstützen Sie HackTricks</summary>
|
||||
<summary>HackTricks unterstützen</summary>
|
||||
|
||||
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
Loading…
Reference in a new issue