Uploader bypass: Obtendo XSS em ‘imagem . jpg’

Elber Andre
2 min readFeb 8, 2018

--

Como eu consegui burlar um sistema de upload e obter um XSS em uma imagem.

Dias atrás eu vinha buscando por sites no Hackerone no intuito de encontrar alguma vulnerabilidade em alguns deles e em troca, ganhar pontos de reputação.

Como sou iniciante, decidi começar com a General motors, em um de seus domínios, por ter um baixo número de casos resolvidos, assim isso facilitaria para mim. De início reportei 3 XSS mas por azar foram marcados como “duplicados”.

Em meus testes encontrei o domínio developer.gm.com, onde continha uma área de cadastro para usuários do site.

Uploader

O uploader estava na área de gerenciamento de perfil, onde o mesmo só aceitaria que fossem enviados arquivos com extensão .gif, .jpg e .jpeg, algum outro arquivo o sistema marcava como inválido, impossibilitando o carregamento da imagem para o servidor.

Após várias tentativas de burlar o sistema de upload deles, encontrei um “Directory transversal” e uma maneira de substituir a imagem de qualquer outro usuário.

Então tive a ideia de interceptar e alterar o Content-type da imagem na hora do upload, que estava marcado como ‘image/jpeg’ .

Substituí o Content-Type para: text/html, isso fez com que o servidor ‘informasse’ para o navegador que aquela imagem deveria ser interpretada como um arquivo .html. Fiz uma requisição e o site me retornou a imagem interpretada de acordo com o Content-Type que eu selecionei.

Logo após, enviei uma imagem com um xss payload na source, o resultado saiu como esperado.

Report feito: Feb 6th

Primeira resposta: Feb 7th

Resposta de correção: Feb 7th

O administrador confirmou a vulnerabilidade, ganhei meus pontos e fui adicionado ao ranking de gratificações.

PoC:

https://www.youtube.com/watch?v=T-EQfydIxu4

--

--