Uploader bypass: Obtendo XSS em ‘imagem . jpg’
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: