3.6 KiB
Request Smuggling em Downgrades HTTP/2
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
Origens
A principal origem dessa vulnerabilidade é o fato de que o proxy reverso vai conversar com o cliente usando HTTP/2, mas então ele vai transformar essa comunicação com o servidor back-end em HTTP/1.1.
O problema com essa abordagem é que o usuário será capaz de injetar cabeçalhos desnecessários na comunicação HTTP/2 que provavelmente não serão verificados pelo proxy. Mas então, quando esses são injetados cegamente na comunicação HTTP/1.1, um ataque de smuggling de request pode ser realizado.
Exemplos
H2.CL Desync
A especificação do HTTP/2 indica que o cabeçalho Content-Length não é necessário, mas pode ser indicado. Portanto, o proxy reverso vai tratar todo o conteúdo enviado pelos usuários como a solicitação, mas então, quando rebaixado para HTTP/1.1, esse cabeçalho será injetado na solicitação e, portanto, o back-end tratará a solicitação como 2 solicitações diferentes como você pode ver na imagem abaixo:
H2.TE Desync URL Token Hijack
A especificação do HTTP/2 também indica que qualquer mensagem contendo campos de cabeçalho específicos da conexão DEVE ser tratada como malformada... mas se você não seguir essa regra, você está vulnerável.
Essa técnica foi abusada no balanceador de carga da AWS, então garantir que os usuários acessem um cabeçalho Host apontando para um servidor controlado pelo atacante fará com que eles acessem esse servidor.
H2.TE Desync Header Hijack
Esta é exatamente a mesma técnica que antes, mas verificando as solicitações, James percebeu que os clientes estavam pedindo para enviar suas credenciais, então ele simplesmente modificou seu servidor para permitir o CORS para enviar as credenciais das pessoas para ele:
![](<../../.gitbook/assets/image (662) (1) (1) (1)