UBER HACKING: COMO DESCOBRIMOS QUEM VOCÊ É, ONDE VOCÊ ESTÁ E PARA ONDE FOI!
Para a nossa sorte, Uber decidiu abrir o seu programa de recompensas de bug ao público, e em Portugal, Uber era quase uma questão diária nas notícias por causa dos motoristas de táxi, então nós mergulhamos diretamente nesse programa.
Depois de um par de horas, descobrimos dois redirecionamentos abertos que relatamos imediatamente. Este poderia ser o começo de algo bom (nós pensamos), mas ambos os problemas já foram relatados por outros pesquisadores.
No início, foi um pouco decepcionante, mas não desistindo dobramos e decidimos implementar alguns processos / metodologias.
O Processo / Metodologia
A fim de implementar algum tipo de metodologia, voltamos para o programa de recompensas de bugs Uber para verificar novamente seu escopo, que é muito extenso como pode ser visto abaixo:
- Https: //*.uber.com/
- Http: //*.uberinternal.com/ (adicionado mais tarde no programa)
- Http://petition.uber.org
- Http://ubermovement.com
- Aplicativo iPhone Rider
- Aplicativo de parceiro do iPhone
- Aplicativo Android Rider
- Aplicativo para parceiros Android
Coleta de informações
Para reunir mais informações sobre os subdomínios Uber, começamos com uma força bruta dns.
Com todos os subdomínios enumerados, tudo o que restava a fazer era usar o nmap e verificar se havia banners, títulos de página, redirecionamentos de página, bem como exploit-db e alguns blogs para vulnerabilidades conhecidas.
Para os aplicativos móveis, jd-gui foi usado para ler as classes Java, a fim de mapear os terminais móveis, mais tarde, também se voltou para MobSF .
Agora, a julgar pelas informações que reunimos, sentimos que era mais que suficiente para começar a procurar algumas vulnerabilidades.
Vulnerabilidades
0 × 01 - Possibilidade de códigos promocionais de força bruta em riders.uber.com
Uber tem um recurso que permite o uso de códigos de promoção. Estes códigos podem ser dados por outros usuários ou empresas. A aplicação riders.uber.com tinha esse recurso na página de pagamento, de modo que após a adição de um novo código de promoção que agarrou o pedido e percebeu que a aplicação não teve qualquer tipo de proteção contra ataques de força bruta, o que nos ajudou a encontrar Muitos códigos de promoção diferentes.
A imagem abaixo ilustra nosso ataque de força bruta. Como dito antes códigos diferentes foram encontrados e podem ser distinguidos por sua resposta.
Comprimento das respostas:
- 1951 - Código válido
- 1931 - Não válido
- 1921 - Código Expirado
Uber também dá uma opção para personalizar códigos de promoção, e como todos os códigos padrão começaram com a palavra "uber", foi possível diminuir o tempo da força bruta, permitindo-nos consideravelmente mais de 1000 códigos válidos.
Inicialmente esta edição não foi considerada válida porque os códigos das promoções são supostos ser públicos e ser dado por qualquer um. Isto era verdade até encontrar um $ 100 ERH (Emergency Ride Home) código que eles (equipe uber-sec) não tinha conhecimento sobre. Estes códigos ERH funcionam de forma diferente de todos os outros desde mesmo se um código de promoção já é aplicado estes ainda podem ser adicionados.
CRONOGRAMA DE DIVULGAÇÃO
23 de março de 2016 - Bug relatou a UBER
23 de março de 2016 - A equipe de Uber alterou o estado para Informativo
24 de março de 2016 - Nós forneceu novas informações
24 de março de 2016 - A equipe de Uber alterou o estado para triaged
19 de abril de 2016 - A equipe de Uber alterou o estado para resolvido
02 de maio de 2016 - Uber nos recompensou com uma recompensa.
23 de março de 2016 - A equipe de Uber alterou o estado para Informativo
24 de março de 2016 - Nós forneceu novas informações
24 de março de 2016 - A equipe de Uber alterou o estado para triaged
19 de abril de 2016 - A equipe de Uber alterou o estado para resolvido
02 de maio de 2016 - Uber nos recompensou com uma recompensa.
0 × 02 - Possibilidade de receber email privado usando UUID
Como você pode ver na imagem abaixo, dentro da aplicação móvel Uber riders existe uma seção "Ajuda" que permite aos usuários enviar perguntas diretamente para suporte. Vamos ser honestos, muitos de nós quase nunca usamos a "Ajuda" ou mesmo sabemos que ela existe, mas como pentesters não podemos dizer não a outra forma. (Mais tarde descobrimos que o aplicativo Partners tinha os mesmos formulários).
Depois de enviar uma pergunta, o servidor respondia com a mensagem: "Recebemos o seu pedido e entrará em contato o mais rápido possível através de <my-email-address> ". Olhando para esta mensagem, pensamos que talvez pudéssemos enumerar alguns e-mails de usuários.
Ao analisar o pedido, existem dois locais (o cabeçalho x-uber-uuid eo parâmetro uuid) que podem permitir-nos obter e-mails de outros utilizadores se os alterarmos para outro UUID válido. Nós tentamos mudar ambos, mas infelizmente o servidor retornou o nosso e-mail novamente. Embora haja um parâmetro de token também, a nossa primeira abordagem foi fuzz um pouco para este parâmetro, mas no final, acabamos por alterá-lo para outro usuário UUID e algo mágico aconteceu, o servidor retornou o endereço de e-mail para esse usuário.
É um pouco difícil dizer por que um UUID foi interpretado como um token válido, mas é de fato.
Como o aplicativo não estava restringindo nossos pedidos neste nó de extremidade, pegamos uma pequena quantidade de UUIDs e com eles conseguimos obter todos os e-mails correspondentes a esses UUIDs. Agora você provavelmente está perguntando: "como você pode saber UUIDs de outros usuários?", Isso é o que vamos explicar mais tarde.
CRONOGRAMA DE DIVULGAÇÃO
31 de março de 2016 - erro relatado para Uber
31 de março de 2016 - A equipe de Uber alterou o estado para triaged
11 de abril de 2016 - A equipe de Uber mudou de status para Resolvido
13 de abril de 2016 - Uber-nos recompensado com uma recompensa.
31 de março de 2016 - A equipe de Uber alterou o estado para triaged
11 de abril de 2016 - A equipe de Uber mudou de status para Resolvido
13 de abril de 2016 - Uber-nos recompensado com uma recompensa.
0 × 03 - Enumerando UserIDs com números de telefone (duplicados)
Ao procurar vulnerabilidades, sempre tentamos encontrar todos os recursos do aplicativo / webapp, especialmente aqueles que não são facilmente encontrados ou usados. Com isso em mente, decidimos obter os nossos telefones, computadores e chamado para um Uber e por isso fizemos. Durante a nossa viagem, interceptamos todos os pedidos e um desses pedidos chamou a nossa atenção.
Esse pedido ocorre quando um usuário tenta dividir sua tarifa com outras pessoas. Para convidar alguém para dividir a tarifa, o usuário precisa adicionar um número de telefone de sua lista de contatos.
O problema aqui é que a resposta está vazando informações demais, como driver UUID, UUIDs convidados ea imagem de convidados, mesmo antes de aceitar a divisão de tarifa.
Você pode ver o aplicativo vazando as informações nas fotos abaixo:
Lembre-se antes quando lhe dissemos que nós explicaríamos como conseguimos uma lista de UUIDs? É assim!
Agora, juntando-se a esta vulnerabilidade com a anterior, poderíamos obter anyones endereço de e-mail que estava associado ao número de telefone.
Infelizmente, depois de reportar este problema, foi marcado como duplicado .
CRONOGRAMA DE DIVULGAÇÃO
06 de abril de 2016 - Bug relatou a UBER
07 de abril de 2016 - A equipe de Uber alterou o estado para Necessidades mais informações
07 de abril de 2016 - Nós forneceu novas informações
07 de abril de 2016 - A equipe de Uber alterou o estado para Duplicar
07 de abril de 2016 - A equipe de Uber alterou o estado para Necessidades mais informações
07 de abril de 2016 - Nós forneceu novas informações
07 de abril de 2016 - A equipe de Uber alterou o estado para Duplicar
0 × 04 - Utilizar a aplicação de parceiros / controladores sem ser activada (duplicada)
Cada usuário é capaz de criar uma conta de driver, mas permanece não ativado até Uber verificar todos os seus documentos de driver.
Depois de começar a testar o aplicativo Parceiro / Driver, percebemos que você só pode entrar no aplicativo para celular após o processo de ativação.
Olhando sobre o pedido da resposta acima, você pode ver um parâmetro chamado allowNotActivated e seu valor era falsa .
Ao manipular a solicitação de login e alterar o parâmetro allowNotActivated a verdade, foi possível obter um token de sessão válido. Assim, pelo menos, isso significa que o servidor criar um token válido mesmo quando a conta não foi ativada.
Como você pode ver na resposta, há um campo chamado IsActivated setado para falso . Alterar isso para true nos permitiu entrar no aplicativo.
Agora temos um par de novos recursos para testar.
CRONOGRAMA DE DIVULGAÇÃO
31 de março de 2016 - erro relatado para Uber
31 de março de 2016 - A equipe de Uber alterou o estado para Necessidades mais informações .
31 de março de 2016 - Nós forneceu novas informações
07 de abril de 2016 - A equipe de Uber alterou o estado para duplicado
31 de março de 2016 - A equipe de Uber alterou o estado para Necessidades mais informações .
31 de março de 2016 - Nós forneceu novas informações
07 de abril de 2016 - A equipe de Uber alterou o estado para duplicado
0 × 05 - Possibilidade de visualizar o Waybill do condutor via Driver UUID
Usando a vulnerabilidade anterior, conseguimos testar uma nova funcionalidade chamada waybill. Criando o pedido que o aplicativo envia, notamos que ele tem uma vulnerabilidade de controle de acesso quebrada que nos permitiu ver a última viagem de cada driver, apenas conhecendo seu uuid.
Para obter um driver UUID você pode, por exemplo, solicitar um carro aleatório, deixe o motorista aceitar a viagem e depois disso você cancelá-lo. Enquanto isso você é capaz de capturar o driver UUID.
Na resposta deste pedido, conseguimos obter o nome do condutor, placa de matrícula, último tripUUID, último nome do passageiro, número de passageiros, a origem eo destino da viagem.
Observe o TRIP # nesta resposta? Para obter o caminho completo da viagem, acabamos descobrindo uma nova funcionalidade que retorna o caminho completo da viagem , o nome do driver , nome do cliente , placa de licença e até mesmo o modelo do carro.
Esta funcionalidade não poderia ser detalhada neste momento, mas assim que estivermos autorizados, vamos falar sobre isso.
CRONOGRAMA DE DIVULGAÇÃO
31 de março de 2016 - erro relatado para Uber
01 de abril de 2016 - A equipe de Uber alterou o estado para triaged
13 de abril de 2016 - A equipe de Uber mudou de status para Resolvido
18 de abril de 2016 - Uber-nos recompensado com uma recompensa.
01 de abril de 2016 - A equipe de Uber alterou o estado para triaged
13 de abril de 2016 - A equipe de Uber mudou de status para Resolvido
18 de abril de 2016 - Uber-nos recompensado com uma recompensa.
0 × 06 - Informações sobre viagens de outros usuários
Lembre-se da vulnerabilidade 0 × 03, onde descobrimos que alterando o token por um UUID poderíamos representar outro usuário?
A solicitação acima permite que um usuário veja as viagens feitas por ele mesmo. Observe que, no pedido, há cabeçalhos de sessão ou cookies de sessão. Todos os detalhes ** session ** são enviados via parâmetros GET.
Alterando o uuid realçado e mantendo o token original, o servidor retorna um 403 acesso não autorizado. Se mudarmos o UUID eo token para o UUID do usuário que você quer ver as viagens, temos um monte de novas informações
Essa foi a resposta ao solicitar viagens enviando o mesmo valor nos campos UUID e TOKEN.
Como pode ser visto, fomos capazes de obter a data da viagem, nome do condutor e imagem, o id e custo da viagem eo mapa de onde ele foi.
A resposta acima demonstra apenas uma viagem única, mas a resposta completa nos dá todas as viagens feitas pelo usuário.
CRONOGRAMA DE DIVULGAÇÃO
31 de março de 2016 - erro relatado para Uber
31 de março de 2016 - A equipe de Uber alterou o estado para triaged
05 de abril de 2016 - A equipe de Uber mudou de status para Resolvido
13 de abril de 2016 - Uber-nos recompensado com uma recompensa.
31 de março de 2016 - A equipe de Uber alterou o estado para triaged
05 de abril de 2016 - A equipe de Uber mudou de status para Resolvido
13 de abril de 2016 - Uber-nos recompensado com uma recompensa.
E quanto aos lucros?
VULNERABILIDADES DUPLICADAS
VULNERABILIDADES TRIAGEM / FECHADA
Conclusão
Este foi o nosso primeiro programa de recompensas de bugs que realmente dedicamos algum tempo, e achamos que teve um resultado positivo. No início não estávamos muito confiantes com este programa, porque muitas pessoas já tinham testado Uber no programa privado, mas depois de algum tempo e quando começamos a encontrar algumas boas vulnerabilidades nos deu o impulso para continuar e ver onde ele Poderia nos levar.
Para as pessoas que estão começando os programas de bounty bug, o nosso conselho é: nunca desista ou ter medo, se é uma grande empresa, apenas se divertir e tentar aprender o máximo possível ao longo do caminho e no tempo os lucros virão.
Como uma nota final para o nosso artigo, queremos dizer que Uber deve fornecer contas de teste para caçadores de bugs. Durante nossos testes tínhamos nossas contas sendo bloqueadas devido à natureza dos nossos testes e para desbloqueá-los, foi um pouco de um pesadelo. Nesse momento tentamos conversar com a equipe de suporte da Uber e eles não ajudaram muito, então a única coisa a fazer foi tentar conversar diretamente com a equipe de segurança. Neste caso, temos de dizer que eles ajudaram, e muito! (Um grande obrigado a todos eles).
Com isto dito, nós pensamos que Uber tem um dos melhores programas da recompensa do erro, com payouts grandes.
Do ponto de vista de um pentester, a equipe de segurança leva este programa muito a sério, tentando resolver todos os problemas o mais rápido possível.
Comentários
Postar um comentário