Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Possibilidade de Ataque “Host Header”

Olá Galera, temos um Webapp aqui na empresa que passou por alguns programas como o Acunetix, que relatou algumas vulnerabilidades, entre elas o Ataque Host Header, alguem sabe o que é, e como eu consigo resolver essa vulnerabilidade? segue abaixo a descrição do problema, do relatório do programa.

Descrição: O fundamento do ataque “Host Header” baseia-se numa prática de desenvolvimento em que a aplicação utiliza o cabeçalho HTTP Host Header para gerar links de acesso, importar scripts ou até para gerar links para reset de senhas. Está é uma prática não recomendável e vulnerável devido a possibilidade de manipulação do valor do cabeçalho Host Header por usuários maliciosos. Tal manipulação pode fazer com que a aplicação se comporte de forma não esperada.

Recomendação: É recomendável que a aplicação web utilize o SERVER_NAME ou o nome do host em questão ao invés do cabeçalho Host Header.

6 respostas
solução!

Todo request HTTP pode enviar junto um cabeçalho Host que indica o nome do domínio sendo requisitado. Ex:

Host: www.alura.com.br

A questão é que algumas aplicações usam esse valor para validar ações impotantes (como os exemplos citados, tipo gerar links de acesso etc). E isso não é uma boa ideia.

Esse cabeçalho pode ser alterado pelo cliente (browser) facilmente e não deve ser usado em nenhuma decisão de segurança.

O tal SERVER_NAME que ele cita é uma variável do mundo PHP que indica o nome do servidor, independente do cabeçalho Host. (em outras linguagens há funcionalidades equivalentes)

Sérgio, valeu pelo retorno, eu entendi que esse Host é um valor que requisição HTTP pode ou não enviar, e pode ser usada para algum fim.

Pelo o que verifiquei, não há validações usando essa informação do HOST na minha WebApp, para fins de segurança um cliente nosso solicitou que fizéssemos essa "Correção", aqui não usamos PHP, usamos, JS, CSS, Java e Vraptor, gostaria de saber onde poderia alterar esse cabeçalho para não envio desse Host ou alterar para não apresentar essa "vulnerabilidade" que meu cliente diz que nossa aplicação tem.

Estou estudando o protocolo para entender melhor, mas ainda estou no inicio.

Obrigado.

Sergio, encontrei isso no site: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23

A client MUST include a Host header field in all HTTP/1.1 request messages . If the requested URI does not include an Internet host name for the service being requested, then the Host header field MUST be given with an empty value. An HTTP/1.1 proxy MUST ensure that any request message it forwards does contain an appropriate Host header field that identifies the service being requested by the proxy. All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message which lacks a Host header field.

Se eu entendi direito, eu sempre devo passar o valor do Host na request, ou se eu não passar o nome exato, devo passar um que o server entende, para validar a requisição... é isso?

Mas voce que ta montando os requests? Nao sei se entendi direito. Ou é uma webapp normal e quem faz os requests é o browser? Nesse caso, o Host vai ser setado automaticamente, vc nao precisa fazer nada.

E no seu back-end Java, vc lê o header Host em algum momento? Usa pra alguma finalidade? Se não usar, não vejo brecha de segurança aí não

Sérgio,

Acredito que entendi, quem monta as Requests, acredito que seja o browser mesmo, meu webapp é comum, sobre o Host, na minha analise não usamos, para verificar nada, tinha visto alguns exemplos de webapp que utilizam o host para alteração de senha, porém meu sistema não re-define a senha via email.

como eu não uso para validar nada, não tenho problema em enviar o host, certo?

Obrigado pela Ajuda.

Perfeito, parece tudo ok