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.

Subdomínios
Exemplo de subdomínios recuperados com sublist3r

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 .

API endpoints reunidos com jd-gui
API endpoints reunidos com jd-gui

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.

Formulário de página de promoções - sem qualquer código de promoção aplicado
Formulário de página Promoções - sem qualquer código de promoção aplicado

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

Exemplo de ataque de força bruta
Exemplo de ataque de força bruta

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.

Formulário vulnerável com código ERH aplicado

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.
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).

02_help
Função de ajuda

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  ". Olhando para esta mensagem, pensamos que talvez pudéssemos enumerar alguns e-mails de usuários.

02_request
Solicitar o envio de uuid em vez de token

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.

02_response
Servidor respondeu com e-mail associado ao uuid

É 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.-benzóico.

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.
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.

03_01
Solicitar convite para dividir a tarifa

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:

03_02
Resposta vazando informações sobre o usuário convidado [1/2]
03_03
Resposta vazando informações sobre o usuário convidado [2/2]

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
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.

04_01
Resposta de "conta de driver não ativada"

Olhando sobre o pedido da resposta acima, você pode ver um parâmetro chamado allowNotActivated e seu valor era falsa .

04_02
Pedido com novo valor no parâmetro "allowNotActivated"

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.

04_03
Novo token criado

Como você pode ver na resposta, há um campo chamado IsActivated setado para falso . Alterar isso para true nos permitiu entrar no aplicativo.

04_04
Interface do aplicativo de parceiros móveis

Agora temos um par de novos recursos para testar. -benzóico.

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
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.

05_01
Pedido de carta de mudança de outro condutor

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.

05_02
Resposta detalhada do guia de condução do condutor

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.

05_03
Caminho completo da viagem

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.
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?

06_01
Solicitando viagens associadas ao uuid (no token)

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-benzóico.
Essa foi a resposta ao solicitar viagens enviando o mesmo valor nos campos UUID e TOKEN.

06_02
Lista de viagens associadas ao UUID

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.

E quanto aos lucros?

VULNERABILIDADES DUPLICADAS

#VulnerabilidadeRelatado em
1Abrir redirecionamento em trip.uber.com23/03/2016
2Abrir redirecionamento em riders.uber.com23/03/2016
3Possibilidade de enumerar usuários através do getrush.uber.com e login bruteforce via app do iOS para obter uma conta válida26/03/2016
4Possibilidade de baixar app beta como admin (Riders app IOS)30/03/2016
5Utilizar a aplicação de parceiros / controladores sem estar activada31/03/2016
6Enumerando IDs de usuário com números de telefone06/04/2016

VULNERABILIDADES TRIAGEM / FECHADA

#VulnerabilidadeRelatado emRecompensa
1Possibilidade de invocar códigos de força bruta em riders.uber.com23/03/2016Pago
2A ser divulgado24/03/2016Esperando..
3A ser divulgado25/03/2016Esperando..
4Possível ver o Waybill do condutor via Driver UUID31/03/2016Pago
5Possibilidade de obter email privado usando UUID31/03/2016Pago
6Informações sobre viagens de outros usuários31/03/2016Pago
7A ser divulgado07/04/2016Esperando..
8A ser divulgado13/04/2016Esperando..

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.


https://labs.integrity.pt/articles/uber-hacking-how-we-found-out-who-you-are-where-you-are-and-where-you-went/