Vulnerabilidades de varejistas - três casos em que o OTP pode ser obtido na solicitação

Ao inserir contas pessoais de vários serviços, por motivos de segurança, o 2FA é frequentemente usado - além do login e da senha, é necessário inserir um código único.

Mas, como se viu, nem tudo é tão seguro, mesmo com autenticação de dois fatores - no último ano eu encontrei três (!) Serviços quando um código de login único, enviado ao cliente via SMS, podia ser visualizado na própria solicitação.

Mais brevemente sobre o que ameaçava com exemplos específicos.

1. Uma rede popular de postos de gasolina, mais de 500.000 clientes registrados.

Uma solicitação ao inserir a versão web da sua conta pessoal:
POST https://someazs.ua/ua/profile/auth/ Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: gzip, deflate, br Accept-Language: ru,en-US;q=0.9,en;q=0.8,uk;q=0.7 Connection: keep-alive Content-Length: 408 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=6n3l2o90hfb020u9ag020u8ha1; usersomeazs_popupcoupons=1;... Host: someazs.ua Origin: https://someazs.ua Referer: https://someazs.ua/ua/login/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 X-Compress: null X-Requested-With: XMLHttpRequest data[phone_mask]: 951234567 data[phone]: 0951234567 




Resposta: {"Status":0,"Code":"7038","status":true,"step2":true}

O código do SMS - 7038 - é visível simplesmente na resposta do servidor.

Ou seja, no site, ao inserir a conta pessoal, a resposta continha um código de login único, enviado ao cliente via SMS - você pode efetuar login na conta de outra pessoa especificando apenas o número de telefone do cliente e consultar o OTP na própria solicitação.

Na sua conta pessoal estão disponíveis: número do cartão de fidelidade, nome, saldo (bônus em UAH, litro, café), histórico de transações, nas configurações - data de nascimento, e-mail do cliente, etc.



Com a ajuda de outras ações de natureza não técnica (por exemplo, toque do cliente), com boa sorte, pode-se usar dinheiro / litros / café do cliente. Por que estou escrevendo "com boa sorte"? Quando falei sobre o problema, fui informado de que os acordos com bônus de outras pessoas não são tão fáceis de executar, mesmo se você tiver acesso à conta, pois há verificações adicionais. No entanto ...

O erro foi corrigido rapidamente, agradeceu.



2. Uma rede de lojas sociais (semelhante ao Fix-Price ), um aplicativo móvel (mais de 100 mil downloads)



Ao rastrear solicitações através do Fiddler, observei o seguinte. Ao entrar no aplicativo móvel, depois de inserir o número de telefone e o cartão de fidelidade, um código único é enviado ao cliente.

O problema é que ele executa uma solicitação GET do formulário:
 https://bulk.somesmssender.com/?sending_method=sms&from=someretailes&user=onviber4821&txt=%D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234&phone=380987654321&sign=42f66957a03090eb90556b0ef7fed2e1 


O próprio código único é visível diretamente nesta solicitação: o texto do SMS que está sendo enviado é
 %D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234& 


Um simples relatório de conversão: Código + confirmação: +1234



I.e. no próprio aplicativo, você pode ver qual código será enviado. Aqui você também pode entrar nas contas de outras pessoas, já sem um segundo fator.

Por alguma razão, os clientes desta rede são os menos protegidos contra fraudes, por isso tentei muitas vezes transmitir informações à empresa. Escrevi três vezes em agosto para o endereço indicado na página do aplicativo no Play Market - não recebi uma resposta única, nem automática.

Mais tarde, escrevi para uma empresa cujo serviço de distribuição de SMS eles usam. Eles me responderam que é necessário entrar em contato com o proprietário do aplicativo móvel, pois eles, por sua vez, não podem influenciar o desenvolvimento e a transferência de informações dessa empresa.

Isso é verdade, mas assumi que o serviço de mensagens poderia afetá-los como parceiro / cliente. Além disso, o motivo pelo qual escrevi para o serviço de correspondência é que a solicitação GET especificada é precisamente o desenvolvimento deles, e esse também é provavelmente o caso de outros clientes. Sugeri que seria desejável que o serviço corrigisse a lógica de distribuição - para não transmitir os números de telefone dos clientes e o código único na solicitação - eles não me responderam.

Um pouco sobre como mais eu tentei transmitir o problema
Depois, no site da loja, escrevi no e-mail de contato e esperei - e novamente nada. Mas, como sou teimosa, encontrei no mesmo site todos os contatos possíveis (caixas de correio gerais e endereços pessoais) e escrevi para eles - como você sabe, ninguém respondeu.
Portanto, mais tarde, virei-me para o chat e diretamente no chat fiz a pergunta se eles receberam minhas cartas. No início, eles responderam que não viam, depois encontraram e prometeram que dariam.

Curiosamente, além da falta de reação ao e-mail no endereço principal do aplicativo, depois de conversar, recebi cartas. Em um deles, vi como eles me trouxeram para o sistema: "Homem inteligente"



Atitude mais ou menos em relação ao cliente.

Quando eu verifiquei pela última vez, não havia nenhuma solução da Avrora .
Também não houve correções por parte do serviço de distribuição, mas aqui a situação é mais grave, portanto não indico diretamente o nome do serviço.



3. Um aplicativo móvel para armazenar cartões de desconto e efetuar pagamentos móveis (mais de 130 mil clientes)

Na entrada, você precisa inserir apenas email e código. Nesse caso, a consulta é executada:

 POST http://api.somewallet.com/mobileclient.svc/getRegistrationCode HTTP/1.1 Content-Type: application/json; charset=UTF-8 Content-Length: 100 Host: api.somewallet.com Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.12.3 {"request":{"Culture":"ru_RU","DeviceIdentifier":"4514825570005447","Identifier":"some@email"}} 

Aqui está a resposta:

 {"GetRegistrationCodeResult":{"ErrorMessage":{"Code":0,"LogReferenceId":0,"Message":"SUCCESS"},"Data":{"Code":"044912"}}} 


Aqui, a resposta também mostra o código que precisa ser inserido (044912).

Após o login, obtive acesso às seguintes funções:

  • visualizando cartões de fidelidade e bônus neles,
  • cupons para determinadas lojas,
  • informações de contato do cliente (números de telefone e email, data de nascimento e nome)
  • definir, alterar e excluir um código de acesso de 4 dígitos,
  • ver cartões de pagamento
  • receber um token de pagamento (semelhante ao token do meu artigo anterior Como andar de táxi às custas de outra pessoa ).

Assim, todas as funções do aplicativo podem ser acessíveis a qualquer pessoa que simplesmente indique o endereço de e-mail do usuário desse aplicativo - você não precisa descobrir um código único do usuário, pois é visível imediatamente após a entrada. O problema é idêntico aos outros dois.

Eles responderam à minha mensagem, corrigiram a vulnerabilidade e agradeceram-lhes financeiramente.



Podemos dizer que, às vezes, nos serviços, você pode ignorar a autenticação de dois fatores apenas observando as solicitações de autorização. E isso afeta sites e aplicativos móveis. Portanto, da próxima vez que você desenvolver ou testar serviços com uma conta pessoal, preste atenção a isso.

Source: https://habr.com/ru/post/pt465791/


All Articles