O que é injeção de cabeçalho HTTP?
Injeção de cabeçalho HTTP é um método de ataque que explora vulnerabilidades em applications da web. Ao incorporar sequências de caracteres maliciosas, incluindo caracteres de retorno de carro e avanço de linha (CRLF), em solicitações HTTP enviadas ao servidor web, os invasores podem manipular as respostas HTTP. Applications web que armazenam parâmetros fornecidos pelo usuário diretamente em cabeçalhos de resposta HTTP sem higienização são particularmente vulneráveis a esse tipo de ataque.
Por exemplo, considere um cenário em que um navegador envia a seguinte solicitação com um parâmetro:
http://f5.com/index.html?status=1
Se o application web desejar usar o parâmetro status=1 para gerenciamento de sessão, ele poderá retornar uma resposta HTTP como esta:
HTTP/1.1 200 OK
...
Definir-Cookie:status=1
Agora, suponha que a solicitação seja modificada com a seguinte entrada elaborada:
http://f5.com/index.html?status=1<CRLF><CRLF><html><corpo><script>~</script></corpo></html>
A resposta HTTP do application web seria alterada da seguinte forma:
HTTP/1.1 200 OK
...
Definir-Cookie:status=1
<linha em branco>
<html><corpo><script>~</script></corpo></html>
Em respostas HTTP, qualquer conteúdo após dois caracteres CRLF (linhas em branco) é tratado como o corpo da resposta e renderizado pelo navegador. Se o corpo da resposta incluir JavaScript malicioso, o navegador o executará, levando a possíveis violações de segurança. Além disso, os invasores podem criar entradas para injetar conteúdo de cabeçalho como:
<CRLF>Definir-Cookie:PHPSESSID=abc
Isso definiria um ID de sessão específico no navegador e permitiria ataques de fixação de sessão.