hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md
2023-06-06 18:56:34 +00:00

13 KiB

Cabeçalhos HTTP Especiais

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Listas de palavras e ferramentas

Cabeçalhos para alterar a localização

Reescrever o IP de origem:

  • X-Originating-IP: 127.0.0.1
  • X-Forwarded-For: 127.0.0.1
  • X-Forwarded: 127.0.0.1
  • Forwarded-For: 127.0.0.1
  • X-Forwarded-Host: 127.0.0.1
  • X-Remote-IP: 127.0.0.1
  • X-Remote-Addr: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • X-Original-URL: 127.0.0.1
  • Client-IP: 127.0.0.1
  • X-Client-IP: 127.0.0.1
  • X-Host: 127.0.0.1
  • True-Client-IP: 127.0.0.1
  • Cluster-Client-IP: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • Via: 1.0 fred, 1.1 127.0.0.1
  • Connection: close, X-Forwarded-For (Verifique os cabeçalhos hop-by-hop)

Reescrever a localização:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

Cabeçalhos hop-by-hop

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.

  • Connection: close, X-Forwarded-For

{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}

HTTP Request Smuggling

  • Content-Length: 30
  • Transfer-Encoding: chunked

{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}

Cabeçalhos de cache

Cabeçalhos de cache do servidor:

  • 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

{% content-ref url="../../pentesting-web/cache-deception.md" %} cache-deception.md {% endcontent-ref %}

Cabeçalhos de cache local:

  • 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
Content-Security-Policy: require-trusted-types-for 'script'
// 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;');
    }
  });
}
// 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;'

X-Content-Type-Options

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.

X-Content-Type-Options: nosniff impede isso, instruindo o navegador de que o tipo MIME definido no cabeçalho Content-Type para uma determinada resposta está correto. Este cabeçalho é recomendado para todos os seus recursos.

X-Content-Type-Options: nosniff

X-Frame-Options

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. Além disso, em alguns casos, ataques do tipo Spectre dão a sites maliciosos a chance de aprender sobre o conteúdo de um documento incorporado.

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.

Se você precisar de um controle mais granular, como permitir apenas uma origem específica para incorporar o documento, use a diretiva frame-ancestors do CSP.

X-Frame-Options: DENY

Política de Recursos de Origem Cruzada (CORP)

Um atacante pode incorporar recursos de outra origem, por exemplo, do seu site, para aprender informações sobre eles, explorando vazamentos entre sites.

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.

Cross-Origin-Resource-Policy: same-origin

Política de Recursos de Origem Cruzada (CORB)

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.

Política de Abertura de Origem Cruzada (COOP)

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. Em alguns casos, isso também pode permitir a exploração de ataques de canal lateral baseados em Spectre.

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.

Cross-Origin-Opener-Policy: same-origin-allow-popups

Compartilhamento de Recursos de Origem Cruzada (CORS)

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.

Por padrão, os navegadores aplicam a política de mesma origem 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.

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Política de Incorporação de Origem Cruzada (COEP)

Para reduzir a capacidade de ataques baseados em Spectre de roubar recursos de origem cruzada, recursos como SharedArrayBuffer ou performance.measureUserAgentSpecificMemory() são desativados por padrão.

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 ou CORP. COEP pode ser combinado com Cross-Origin-Opener-Policy para optar um documento pelo isolamento de origem cruzada.

Use Cross-Origin-Embedder-Policy: require-corp quando quiser habilitar o isolamento de origem cruzada para o seu documento.

Cross-Origin-Embedder-Policy: require-corp

HTTP Strict Transport Security (HSTS)

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.

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.

Strict-Transport-Security: max-age=3153600

Recursos

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥