Introdução
HTTP Request Smuggling é uma técnica de interferir a maneira que o site processa sequência de requests HTTP que são recebidos por um ou mais usuários. Vulnerabilidades do tipo Request Smuggling são frequentemente críticas por natureza, e permite que o atacante passe por controles de segurança, ganhar acesso não autorizado a informações sensíveis e comprometer diretamente outros usuários da aplicação.
O que acontece em um ataque HTTP Request Smuggling?
Atualmente, as aplicações web frequentemente usam cadeias de HTTP servers entre usuários e a lógica da aplicação. Usuários envia requests para um servidor frontend (as vezes chamado de balancer ou proxy reverso) e esse server redireciona o request para um ou mais servidores backend. Esse tipo de arquitetura é cada vez mais comum, e em alguns casos inevitável, em aplicações modernas de nuvem.
Quando o servidor frontend redireciona o request HTTP para o servidor do backend, ele tipicamente envia diversos requests para o mesma rede de conexão backend, porque isso muito mais eficiente e performático. Esse protocolo é muito simples: HTTP requests são enviados um atrás do outro, e quando são recebidos pelo servidor são interpretados para definir onde um request começa e onde o próximo request termina:
Nessa situação, é crucial que o sistema do frontend e backend concordam sobre os limites entre os requests. Ao contrário, o atacante pode ser capaz de enviar requests ambíguos que serão interpretados diferentemente pelos servidores do backend e frontend:
Nesse exemplo, o atacante faz com que o request no servidor frontend seja interpretado como o começo do próximo request no servidor backend. Isso pode ter um efeito devastador no sistema.
Como realizar um ataque HTTP Smuggling Request?
Para realizar um ataque de HTTP Smuggling Request, é necessário com que tenha um entendimento sobre os Headers dos requests. Existem alguns headers necessários e algumas observações importantes:
Certifique-se de utilizar o método HTTP 1.1
Headers possivelmente necessários
Certifique-se de utilizar esses headers e apagar os outros
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded Content-Length: 6 Transfer-Encoding: chunked