HTTP Request Smuggling

Como Funciona

HTTP Request Smuggling é uma técnica para interferir na maneira como um site processa sequências de solicitações HTTP recebidas de um ou mais usuários. As vulnerabilidades de Request Smuggling geralmente são de natureza crítica, permitindo que um invasor ignore os controles de segurança, obtenha acesso não autorizado a dados confidenciais e comprometa diretamente outros usuários do aplicativo.

O cabeçalho Transfer-Encoding pode ser usado para especificar que o corpo da mensagem use codificação em partes. Isso significa que o corpo da mensagem contém um ou mais blocos de dados. Cada pedaço consiste no tamanho do pedaço em bytes (em hexadecimal), seguido por uma nova linha, seguida pelo conteúdo do pedaço. A mensagem é finalizada com um pedaço de tamanho zero. Por exemplo:

POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked

b
q=smuggling
0

Como a especificação HTTP fornece dois métodos diferentes para especificar o tamanho das mensagens HTTP, é possível que uma única mensagem use os dois métodos ao mesmo tempo, para que entrem em conflito. A especificação HTTP tenta evitar esse problema, afirmando que, se os cabeçalhos Content-Length e Transfer-Encoding estiverem presentes, o cabeçalho Content-Length deverá ser ignorado. Isso pode ser suficiente para evitar ambiguidade quando apenas um servidor estiver em jogo, mas não quando dois ou mais servidores estiverem encadeados. Nessa situação, problemas podem surgir por dois motivos:

  • Alguns servidores não suportam o cabeçalho Transfer-Encoding em solicitações.

  • Alguns servidores que suportam o cabeçalho Transfer-Encoding podem ser induzidos a não processá-lo se o cabeçalho for ofuscado de alguma forma.

Se os servidores front-end e back-end se comportarem de maneira diferente em relação ao cabeçalho de codificação de transferência (possivelmente ofuscado), eles poderão discordar sobre os limites entre solicitações sucessivas, levando a vulnerabilidades de Request Smuggling.

Tipos de Smuggling

Os ataques de Request Smuggling envolvem colocar o cabeçalho Content-Length e o cabeçalho Transfer-Encoding em uma única solicitação HTTP e manipulá-los para que os servidores front-end e back-end processem a solicitação de maneira diferente. A maneira exata de fazer isso depende do comportamento dos dois servidores. Segue abaixo os cenários presentes

  • CL.TE: O servidor front-end usa o cabeçalho Content-Length e o servidor back-end usa o cabeçalho Transfer-Encoding.

  • TE.CL: O servidor front-end usa o cabeçalho Transfer-Encoding e o servidor back-end usa o cabeçalho Content-Length.

  • TE.TE: Os servidores front-end e back-end suportam o cabeçalho Transfer-Encoding, mas um dos servidores pode ser induzido a não processá-lo, ofuscando o cabeçalho de alguma maneira.

Site

https://portswigger.net/web-security/request-smuggling
https://blog.zeddyu.info/2019/12/08/HTTP-Smuggling-en/

Last updated