diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py
index af5949449..5d070c39f 100644
--- a/hacktricks-preprocessor.py
+++ b/hacktricks-preprocessor.py
@@ -78,6 +78,9 @@ def ref(matchobj):
sys.exit(1)
+ if href.endswith("/README.md"):
+ href = href.replace("/README.md", "/index.html")
+
template = f"""{title}"""
# translate_table = str.maketrans({"\"":"\\\"","\n":"\\n"})
diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md
index be5fa6d20..bedef8481 100644
--- a/src/pentesting-web/content-security-policy-csp-bypass/README.md
+++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md
@@ -64,7 +64,7 @@ object-src 'none';
- `*`: Permite todas as URLs, exceto aquelas com esquemas `data:`, `blob:`, `filesystem:`.
- `'self'`: Permite carregamento do mesmo domínio.
-- `'data'`: Permite que recursos sejam carregados via o esquema de dados (por exemplo, imagens codificadas em Base64).
+- `'data'`: Permite que recursos sejam carregados via esquema de dados (por exemplo, imagens codificadas em Base64).
- `'none'`: Bloqueia o carregamento de qualquer fonte.
- `'unsafe-eval'`: Permite o uso de `eval()` e métodos semelhantes, não recomendado por razões de segurança.
- `'unsafe-hashes'`: Habilita manipuladores de eventos inline específicos.
@@ -93,7 +93,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
- `'host'`: Especifica um host específico, como `example.com`.
- `https:`: Restringe URLs àquelas que usam HTTPS.
- `blob:`: Permite que recursos sejam carregados de URLs Blob (por exemplo, URLs Blob criadas via JavaScript).
-- `filesystem:`: Permite que recursos sejam
+- `filesystem:`: Permite que recursos sejam carregados do sistema de arquivos.
+- `'report-sample'`: Inclui uma amostra do código que viola a política no relatório de violação (útil para depuração).
+- `'strict-origin'`: Semelhante a 'self', mas garante que o nível de segurança do protocolo das fontes corresponda ao documento (apenas origens seguras podem carregar recursos de origens seguras).
+- `'strict-origin-when-cross-origin'`: Envia URLs completas ao fazer solicitações de mesma origem, mas apenas envia a origem quando a solicitação é de origem cruzada.
+- `'unsafe-allow-redirects'`: Permite que recursos sejam carregados que redirecionarão imediatamente para outro recurso. Não recomendado, pois enfraquece a segurança.
+
+## Regras CSP Inseguras
+
+### 'unsafe-inline'
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
@@ -147,11 +155,11 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Se você puder fazer upload de um arquivo JS, pode contornar este CSP:
-Carga útil funcional:
+Payload funcional:
```markup
"/>'>
```
-No entanto, é altamente provável que o servidor **valide o arquivo enviado** e só permita que você **envie tipos determinados de arquivos**.
+No entanto, é altamente provável que o servidor esteja **validando o arquivo enviado** e só permitirá que você **envie tipos determinados de arquivos**.
Além disso, mesmo que você conseguisse enviar um **código JS dentro** de um arquivo usando uma extensão aceita pelo servidor (como: _script.png_), isso não seria suficiente porque alguns servidores, como o servidor Apache, **selecionam o tipo MIME do arquivo com base na extensão** e navegadores como o Chrome **rejeitam executar código Javascript** dentro de algo que deveria ser uma imagem. "Felizmente", existem erros. Por exemplo, em um CTF, aprendi que **o Apache não conhece** a extensão _**.wave**_, portanto, não a serve com um **tipo MIME como audio/\***.
@@ -159,7 +167,7 @@ A partir daqui, se você encontrar um XSS e um upload de arquivo, e conseguir en
### Form-action
-Se não for possível injetar JS, você ainda poderia tentar exfiltrar, por exemplo, credenciais **injetando uma ação de formulário** (e talvez esperando que gerenciadores de senhas preencham automaticamente as senhas). Você pode encontrar um [**exemplo neste relatório**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Além disso, observe que `default-src` não cobre ações de formulário.
+Se não for possível injetar JS, você ainda pode tentar exfiltrar, por exemplo, credenciais **injetando uma ação de formulário** (e talvez esperando que gerenciadores de senhas preencham automaticamente as senhas). Você pode encontrar um [**exemplo neste relatório**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Além disso, observe que `default-src` não cobre ações de formulário.
### Endpoints de Terceiros + ('unsafe-eval')
@@ -266,7 +274,7 @@ Abusando \*.google.com/script.google.com
```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` está definido como `self` e um domínio específico que está na lista de permissões pode ser contornado usando JSONP. Os endpoints JSONP permitem métodos de callback inseguros que permitem a um atacante realizar XSS, carga útil em funcionamento:
+Cenários como este, onde `script-src` está definido como `self` e um domínio específico que está na lista de permissões pode ser contornado usando JSONP. Endpoints JSONP permitem métodos de callback inseguros que permitem a um atacante realizar XSS, payload funcional:
```markup
">
">
@@ -285,15 +293,15 @@ A mesma vulnerabilidade ocorrerá se o **endpoint confiável contiver um Open Re
Como descrito no [seguinte post](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), existem muitos domínios de terceiros que podem ser permitidos em algum lugar no 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 |
+| ------------------- | ------------------------------------------- | ------------ |
+| 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 |
+| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
+| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
Se você encontrar algum dos domínios permitidos no CSP do seu alvo, há chances de que você possa contornar o CSP registrando-se no serviço de terceiros e, ou exfiltrando dados para esse serviço ou executando código.
@@ -335,7 +343,7 @@ O navegador, em última análise, carregará `https://example.com/scripts/angula
Isso funciona porque, para o navegador, você está carregando um arquivo chamado `..%2fangular%2fangular.js` localizado em `https://example.com/scripts/react/`, que está em conformidade com CSP.
-∑, eles o decodificarão, efetivamente solicitando `https://example.com/scripts/react/../angular/angular.js`, que é equivalente a `https://example.com/scripts/angular/angular.js`.
+∑, eles irão decodificá-lo, efetivamente solicitando `https://example.com/scripts/react/../angular/angular.js`, 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**.
@@ -353,7 +361,7 @@ Exemplo Online:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.
Se a diretiva **base-uri** estiver ausente, você pode abusar disso para realizar uma [**injeção de marcação pendente**](../dangling-markup-html-scriptless-injection/index.html).
-Além disso, se a **página estiver carregando um script usando um caminho relativo** (como `