Enquanto pesquisava vulnerabilidades zero-day em aplicativos móveis, descobri que é possível roubar o cookie de sessão de um usuário por meio de um deeplink malicioso no KAYAK v161.1. A seguir, explico essa vulnerabilidade em detalhes: onde ela está localizada no código e quais passos são necessários para replicar o exploit.
Onde está essa vulnerabilidade?
Encontrei a seguinte atividade exportada no arquivo AndroidManifest.xml:
Isso significa que qualquer aplicativo instalado em um dispositivo móvel com essa versão vulnerável do KAYAK pode interagir com essa atividade. Além disso, essa atividade pode ser chamada a partir de um deeplink e aceita intents implícitos.
External Auth Logi nActivity
Ao perceber isso, fui imediatamente até a atividade exportada para ver o que ela fazia e como fazia. Enquanto analisava e lia o código-fonte, encontrei duas funções bem chamativas:
Como a atividade está exportada, uma página web maliciosa por meio de um deeplink, ou um aplicativo móvel malicioso por meio de um intent, poderia configurar uma RedirectUrl maliciosa usando a função getRedirectUrl. Certo, mas para que isso tenha impacto, precisamos ver o que podemos fazer com esse comportamento.
É aí que entra o método launchCustomTabs, que, como vemos, concatena um parâmetro GET à URL. Esse parâmetro GET é o cookie de sessão do usuário do aplicativo móvel:
Depois, abri esse link a partir do aplicativo móvel. Ao verificar os registros do servidor malicioso, vi como o cookie de sessão da minha conta foi vazado. Então o copiei e o coloquei na solicitação que mostrei acima
POC de tomada de conta
Abaixo, um vídeo que demonstra a exploração dessa vulnerabilidade:
Problemas e mais problemas: vinculação de contas
Descobri que, depois de roubar o cookie da vítima e fazer login no aplicativo web com ele, consigo ver os dados da vítima sem nenhum problema. No entanto, por algum motivo estranho, não consigo editá-los. Por isso, ao investigar o aplicativo web, percebi que um atacante poderia obter acesso total à conta —e então visualizar, editar, excluir informações etc.— apenas vinculando uma conta do Google (ou qualquer outro provedor disponível).
Nesse caso, vinculei uma conta do Google correspondente ao atacante à conta da vítima. O objetivo era que o atacante só precisasse fazer login no aplicativo a partir da sua conta do Google para obter acesso à conta da vítima.
Pronto. Um atacante remoto e não autenticado pode roubar a conta de qualquer vítima que esteja com a sessão iniciada no aplicativo móvel do KAYAK para Android com um ataque de um clique.
Cronologia
12 de agosto de 2022
Vulnerabilidade reportada: controle de acesso inadequado (CVSS: 9.3; crítica).