hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

191 lines
13 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
# Cabeçalhos HTTP Especiais
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
2023-06-06 18:56:34 +00:00
## Listas de palavras e ferramentas
2021-09-19 15:52:48 +00:00
* [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers)
* [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble)
2021-09-19 15:52:48 +00:00
2023-06-06 18:56:34 +00:00
## Cabeçalhos para alterar a localização
2021-09-19 15:19:00 +00:00
2023-06-06 18:56:34 +00:00
Reescrever o **IP de origem**:
2021-09-19 15:19:00 +00:00
2022-04-05 22:24:52 +00:00
* `X-Originating-IP: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `X-Forwarded-For: 127.0.0.1`
2022-04-19 22:38:50 +00:00
* `X-Forwarded: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Forwarded-For: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Forwarded-Host: 127.0.0.1`
2022-04-05 22:24:52 +00:00
* `X-Remote-IP: 127.0.0.1`
2021-09-19 15:19:00 +00:00
* `X-Remote-Addr: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `X-Original-URL: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Client-IP: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Client-IP: 127.0.0.1`
* `X-Host: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `True-Client-IP: 127.0.0.1`
* `Cluster-Client-IP: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
2021-09-20 13:06:32 +00:00
* `Via: 1.0 fred, 1.1 127.0.0.1`
2023-06-06 18:56:34 +00:00
* `Connection: close, X-Forwarded-For` (Verifique os cabeçalhos hop-by-hop)
2021-09-19 15:19:00 +00:00
2023-06-06 18:56:34 +00:00
Reescrever a **localização**:
2021-09-19 15:19:00 +00:00
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
2023-06-06 18:56:34 +00:00
## Cabeçalhos hop-by-hop
2021-09-19 15:19:00 +00:00
2023-06-06 18:56:34 +00:00
Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consumido pelo proxy que está manipulando a solicitação, em vez de um cabeçalho end-to-end.
2021-09-19 15:19:00 +00:00
* `Connection: close, X-Forwarded-For`
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
2022-06-27 16:53:32 +00:00
## HTTP Request Smuggling
2021-09-19 15:19:00 +00:00
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
2021-11-05 20:59:42 +00:00
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
2023-06-06 18:56:34 +00:00
## Cabeçalhos de cache
2021-09-19 15:52:48 +00:00
2023-06-06 18:56:34 +00:00
**Cabeçalhos de cache do servidor**:
2021-09-20 13:06:32 +00:00
2023-06-06 18:56:34 +00:00
* **`X-Cache`** na resposta pode ter o valor **`miss`** quando a solicitação não foi armazenada em cache e o valor **`hit`** quando está em cache
* **`Cache-Control`** indica se um recurso está sendo armazenado em cache e quando será a próxima vez que o recurso será armazenado em cache novamente: `Cache-Control: public, max-age=1800`
* **`Vary`** é frequentemente usado na resposta para **indicar cabeçalhos adicionais** que são tratados como **parte da chave de cache**, mesmo que normalmente não sejam chaveados.
* **`Age`** define os tempos em segundos que o objeto esteve no cache do proxy.
* **`Server-Timing: cdn-cache; desc=HIT`** também indica que um recurso foi armazenado em cache
2021-09-19 15:52:48 +00:00
{% content-ref url="../../pentesting-web/cache-deception.md" %}
[cache-deception.md](../../pentesting-web/cache-deception.md)
{% endcontent-ref %}
2021-09-19 15:52:48 +00:00
2023-06-06 18:56:34 +00:00
**Cabeçalhos de cache local**:
2023-06-06 18:56:34 +00:00
* `Clear-Site-Data`: Cabeçalho para indicar o cache que deve ser removido: `Clear-Site-Data: "cache", "cookies"`
* `Expires`: Contém a data/hora em que a resposta
```http
Content-Security-Policy: require-trusted-types-for 'script'
```
```javascript
2021-10-19 22:49:43 +00:00
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
}
});
}
```
```javascript
2021-10-19 22:49:43 +00:00
// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.
// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped; // '&lt;img src=x onerror=alert(1)&gt;'
```
2022-06-27 16:53:32 +00:00
### X-Content-Type-Options <a href="#xcto" id="xcto"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Quando um documento HTML malicioso é servido a partir do seu domínio (por exemplo, se uma imagem enviada para um serviço de fotos contém marcação HTML válida), alguns navegadores o tratam como um documento ativo e permitem que ele execute scripts no contexto do aplicativo, levando a um [bug de cross-site scripting](https://www.google.com/about/appsecurity/learning/xss/).
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
`X-Content-Type-Options: nosniff` impede isso, instruindo o navegador de que o [tipo MIME](https://mimesniff.spec.whatwg.org/#introduction) definido no cabeçalho `Content-Type` para uma determinada resposta está correto. Este cabeçalho é recomendado para **todos os seus recursos**.
2021-10-19 22:49:43 +00:00
```http
X-Content-Type-Options: nosniff
```
2022-06-27 16:53:32 +00:00
### X-Frame-Options <a href="#xfo" id="xfo"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Se um site malicioso pode incorporar seu site como um iframe, isso pode permitir que invasores invoquem ações não intencionais pelo usuário com [clickjacking](https://portswigger.net/web-security/clickjacking). Além disso, em alguns casos, ataques do tipo [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) dão a sites maliciosos a chance de aprender sobre o conteúdo de um documento incorporado.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
`X-Frame-Options` indica se um navegador deve ou não ser permitido a renderizar uma página em um `<frame>`, `<iframe>`, `<embed>` ou `<object>`. **Todos os documentos** são recomendados a enviar este cabeçalho para indicar se permitem ser incorporados por outros documentos.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Se você precisar de um controle mais granular, como permitir apenas uma origem específica para incorporar o documento, use a diretiva [frame-ancestors](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) do [CSP](https://web.dev/security-headers/#csp).
2021-10-19 22:49:43 +00:00
```http
X-Frame-Options: DENY
```
2023-06-06 18:56:34 +00:00
### Política de Recursos de Origem Cruzada (CORP) <a href="#corp" id="corp"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Um atacante pode incorporar recursos de outra origem, por exemplo, do seu site, para aprender informações sobre eles, explorando vazamentos entre sites.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
`Cross-Origin-Resource-Policy` mitiga esse risco indicando o conjunto de sites em que pode ser carregado. O cabeçalho pode ter um dos três valores: `same-origin`, `same-site` e `cross-origin`. **Todos os recursos** são recomendados a enviar esse cabeçalho para indicar se permitem ser carregados por outros sites.
2021-10-19 22:49:43 +00:00
```
Cross-Origin-Resource-Policy: same-origin
```
2023-06-06 18:56:34 +00:00
### Política de Recursos de Origem Cruzada (CORB) <a href="#corp" id="corp"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Ajuda a mitigar a ameaça de ataques de canal lateral (incluindo Spectre). É projetado para impedir que o navegador **entregue determinadas respostas de rede de origem cruzada para uma página da web**, quando elas podem conter informações confidenciais e **não são necessárias para recursos da web existentes**.\
Da mesma forma, também ajuda a mitigar vulnerabilidades de Inclusão de Script de Origem Cruzada (XSSI).\
Por exemplo, ele bloqueará uma resposta de texto/html de origem cruzada solicitada de uma tag \<script> ou \<img>, substituindo-a por uma resposta vazia. Esta é uma parte importante das proteções incluídas com [Isolamento de Site](https://www.chromium.org/Home/chromium-security/site-isolation).
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
### Política de Abertura de Origem Cruzada (COOP) <a href="#coop" id="coop"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
O site de um invasor pode abrir outro site em uma janela pop-up para aprender informações sobre ele, explorando [vazamentos de origem cruzada baseados na web](https://xsleaks.dev). Em alguns casos, isso também pode permitir a exploração de ataques de canal lateral baseados em [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)).
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
O cabeçalho `Cross-Origin-Opener-Policy` fornece uma maneira para um documento se isolar de janelas de origem cruzada abertas por meio de `window.open()` ou um link com `target="_blank"` sem `rel="noopener"`. Como resultado, qualquer abertura de origem cruzada do documento não terá referência a ele e não poderá interagir com ele.
2021-10-19 22:49:43 +00:00
```http
Cross-Origin-Opener-Policy: same-origin-allow-popups
```
2023-06-06 18:56:34 +00:00
### Compartilhamento de Recursos de Origem Cruzada (CORS) <a href="#cors" id="cors"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Ao contrário de outros itens deste artigo, o Compartilhamento de Recursos de Origem Cruzada (CORS) não é um cabeçalho, mas um mecanismo do navegador que solicita e permite o acesso a recursos de origem cruzada.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Por padrão, os navegadores aplicam [a política de mesma origem](https://web.dev/same-origin-policy/) para impedir que uma página da web acesse recursos de origem cruzada. Por exemplo, quando uma imagem de origem cruzada é carregada, mesmo que seja exibida visualmente na página da web, o JavaScript na página não tem acesso aos dados da imagem. O provedor de recursos pode relaxar as restrições e permitir que outros sites leiam o recurso optando pelo CORS.
2021-10-19 22:49:43 +00:00
```http
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
2023-06-06 18:56:34 +00:00
### Política de Incorporação de Origem Cruzada (COEP) <a href="#coep" id="coep"></a>
2023-06-06 18:56:34 +00:00
Para reduzir a capacidade de ataques baseados em [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) de roubar recursos de origem cruzada, recursos como `SharedArrayBuffer` ou `performance.measureUserAgentSpecificMemory()` são desativados por padrão.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
`Cross-Origin-Embedder-Policy: require-corp` impede que documentos e workers carreguem recursos de origem cruzada, como imagens, scripts, folhas de estilo, iframes e outros, a menos que esses recursos optem explicitamente por serem carregados por meio de cabeçalhos [CORS](https://web.dev/security-headers/#cors) ou [CORP](https://web.dev/security-headers/#corp). COEP pode ser combinado com `Cross-Origin-Opener-Policy` para optar um documento pelo isolamento de origem cruzada.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
Use `Cross-Origin-Embedder-Policy: require-corp` quando quiser habilitar o [isolamento de origem cruzada](https://web.dev/coop-coep/) para o seu documento.
2021-10-19 22:49:43 +00:00
```http
Cross-Origin-Embedder-Policy: require-corp
```
2022-06-27 16:53:32 +00:00
### HTTP Strict Transport Security (HSTS) <a href="#hsts" id="hsts"></a>
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
A comunicação por meio de uma conexão HTTP simples não é criptografada, tornando os dados transferidos acessíveis a espiões de rede.
2021-10-19 22:49:43 +00:00
2023-06-06 18:56:34 +00:00
O cabeçalho `Strict-Transport-Security` informa ao navegador que ele nunca deve carregar o site usando HTTP e, em vez disso, usar HTTPS. Uma vez definido, o navegador usará HTTPS em vez de HTTP para acessar o domínio sem um redirecionamento por um período definido no cabeçalho.
2021-10-19 22:49:43 +00:00
```http
Strict-Transport-Security: max-age=3153600
```
2023-06-06 18:56:34 +00:00
## Recursos
2021-09-19 19:55:40 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
2021-10-19 22:49:43 +00:00
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>