Neste write-up demonstro a exploração de duas vulnerabilidades que identifiquei em uma das aplicações web do ifood, um HTML Injection e um Form Action Hijacking, vamos aos conceitos:

O que é HTML Injection?

HTML injection é um tipo de vulnerabilidade de aplicações web que ocorre quando a entrada de dados controláveis pelo usuário, normalmente em formulários, não está sendo sanitizada de forma adequada . Sendo assim, um usuário pode inserir metacaracteres que serão interpretados e executados pelo navegador, permitindo que o contexto HTML seja alterado.

Esta vulnerabilidade foi explorada por meio do parâmetro “destino”, seu valor era utilizado na ação do formulário de login, e como a sanitização de metacaracteres não estava sendo realizada de forma correta, foi possível quebrar e injetar código HTML alterando o código fonte do formulário de login da aplicação.

Vamos a exploração:

Prova de conceito de HTML Injection
Código injetado sendo interpretado

 

Como a plataforma possui WAF, as injeções de códigos javascripts foram bloqueadas e seria necessário utilizar de técnicas de evasão para um maior impacto. 

No entanto, notei que o impacto da vulnerabilidade poderia ser elevado devido a utilização do valor do parâmetro na ação do formulário. Logo, pensei que se na ação do formulário fosse especificada uma URL externa, isso possibilitaria o roubo de credenciais do usuário, caracterizando uma vulnerabilidade de Form Action Hijacking.

 

O que é Form Action Hijacking?

Form action Hijacking ou roubo de ação do formulário é um tipo de vulnerabilidade web que ocorre quando o argumento de ação do formulário utiliza um valor que pode ser controlado pelo usuário, possibilitando que o mesmo especifique uma URL qualquer, para onde serão enviados os dados do formulário. Esta vulnerabilidade permite que um atacante roube credenciais modificando o parâmetro vulnerável especificando uma URL maliciosa.

 

Vamos a exploração:

Ao tentar inserir uma URL externa no parâmetro vulnerável, visando o roubo de ação do formulário, percebi que o WAF também bloqueava, sendo necessário um bypass nesta regra. Resolvi então utilizar uma técnica de evasão simples adicionando apenas os caracteres “//” na frente da URL externa, que para a minha surpresa o WAF aceitou, permitindo o roubo de ação de formulário. Seguem as evidências de exploração desta vulnerabilidade:

Especificação da URL maliciosa no parâmetro de destino
Prova de conceito de Form Action Hijancking
Roubo de credenciais por meio do roubo de ação do formulário

 

Impacto

Um atacante poderia utilizar destas duas vulnerabilidades em conjunto para realizar ataques de roubo de credenciais, roubo de dados, phishing, engenharia social e redirecionamentos abertos.

Em um cenário real, poderia utilizar da vulnerabilidade de HTML injection para inserir mais entradas no formulário, por exemplo, CPF e Cartão de Crédito, e utilizar da vulnerabilidade de Form Action Hijacking para enviar estes dados para uma aplicação maliciosa de sua propriedade.

A URL contendo o payload poderia ser compartilhada com outros usuários utilizando técnicas de engenharia social ou spear phishing. Como a aplicação é de propriedade do ifood, isso leva a crer que os dados estão sendo inseridos em uma fonte confiável, enquanto estão sendo enviados para a aplicação do atacante.

Reportei estas vulnerabilidades para a equipe de segurança do ifood, que analisaram e confirmaram o impacto da mesma. As falhas foram encaminhadas para o programa de recompensas do ifood que me retornou uma recompensa de 150 dólares.

Para os bug hunters de plantão, o programa de recompensas agora está sendo realizado por meio da plataforma bugcrowd.

 Timeline

  • HTML Injection reportado 19 de junho de 2020;
  • Form action Hijacking reportado 25 de junho de 2020;
  • Recompensa 28 de agosto de 2020.

Referências

https://owasp.org/www-community/attacks/Form_action_hijacking

https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/11-Client-side_Testing/03-Testing_for_HTML_Injection