Manipulação em faturas do PayPal

Neste blog apresento um achado que encontrei junto com Dikla Barda no PayPal que permite que um invasor malicioso manipule faturas e, assim, receba o pagamento dos produtos no lugar do vendedor.

Neste blog você verá como:

  • Contornamos o mecanismo de captcha do PayPal
  • Executamos força bruta usando VPN em faturas
  • Nós manipulamos os parâmetros da fatura e recebemos o pagamento

Técnico

Abrimos uma conta no sistema de teste do PayPal para que possamos manipular operações que exigem dinheiro. Isso é feito entrando no seguinte site:
https://www.sandbox.paypal.com
Assim que pudemos realizar a manipulação, tentamos fazer o mesmo no Domínio principal:
https://www.paypal.com

A descoberta começa com um estudo das diferentes funcionalidades que existem no PayPal, então chegamos à fatura e começamos a examinar o mecanismo de pagamento das faturas que são criadas ao comprar um produto..

A estrutura de um link de fatura é:
https://www.paypal.com/invoice/payerView/details/INV2-XXXX-XXXX-XXXX-XXXX

Qualquer pessoa pode acessar o link se souber qual é o endereço.

Por isso tentamos verificar se conseguimos localizar faturas de outros usuários, a quantidade de caracteres é relativamente grande para realizar força bruta, e normalmente realizar força bruta para tal quantidade de caracteres é completamente inútil.

Mas devido ao fato de que o PayPal tem centenas de milhões de usuários e dezenas de milhões de vendedores e cada vendedor cria uma fatura para cada produto que compra, sem mencionar a quantidade de produtos que os chineses vendem no eBay através do PayPal, então existem centenas de milhões de faturas no sistema.-brute force.

Tentamos testar e ver quanto tempo levaria para acertarmos pelo menos uma fatura, fizemos isso por desafio pessoal e para colocar os dados na pesquisa que estamos fazendo antes de relatar a falha de segurança ao PayPal.

Mas depois de várias tentativas de força bruta, encontramos um mecanismo de captcha não convencional, parece que o PayPal decidiu criar seu próprio mecanismo de captcha:

Se inserirmos o texto escrito e confirmarmos o captcha, veremos que o parâmetro grgrpt no formato base64 foi adicionado à barra de endereço:
Z3JncnB0=
O que parece assim.:

Então, para contornar esse mecanismo de captcha tudo o que tivemos que fazer foi simplesmente adicionar o seguinte parâmetro à barra de endereço assim que ele aparecer captcha:
Z3JncnB0=
Assim, o back-end do PayPal conclui que inserimos o captcha corretamente.

Depois de contornar o mecanismo de captcha com relativa facilidade, voltamos a executar a Força Bruta nas faturas, aparentemente sem nenhum problema, até que encontramos um bloqueio de IP que não esperávamos..

Acontece que o PayPal bloqueia o IP após 15 minutos de força bruta e libera o IP após um certo período de tempo..

Portanto, ignorar o captcha não é suficiente para obter faturas, mas também precisamos ignorar o bloqueio IP.

Para fazer isso, nos inscrevemos no ZoroVPN e atualizamos nosso script python simples que executava o- brute force.

A ideia principal por trás do script é dividida em 2:

O servidor admin:

  1. Criar uma lista aleatória de Tokens (Há mais chance de acertar assim do que executar uma força bruta contínua) No servidor central que gerencia a lista, a lista é limpa de duplicatas (Quase não encontramos nenhum desses) E salvamos essa lista em um arquivo para que não seja repedida nenhuma verificação de token.
  2. Cada vez enviamos uma lista de 10.000.000 tokens para um dos servidores de força bruta em nossa fila de servidores.
  3. Se um dos servidores encontrar um token, ele a retorna ao servidor de administração para a lista de tokens existentes.

O servidor operacional:

  1. Obtém uma lista de 10.000.000 de tokens e começa a executar brute force.
  2. Se encontrar captcha- adiciona o parâmetro Z3JncnB0= Na barra de endereço.
  3. Se o endereço IP do servidor estiver bloqueado, um endereço IP é substituído usando ZoroVPN.
  4. Se encontrarmos um token existente, envie para o servidor do administrador.
  5. No final de uma execução para cada dez milhões de tokens, será impresso na tela o número de tokens encontrados na execução..


Depois que conseguimos encontrar 2 tokens rodando o software por quase dois dias (Cerca de 40 horas rodando), O que prova que os tokens podem de fato ser encontrados usando a força bruta, passamos para a fase de manipulação.

Na etapa de manipulação, primeiro criamos uma fatura e depois a editamos clicando em editar para que possamos realizar a manipulação de todos os parâmetros e não apenas dos que vemos em-UI.

Depois de examinar em profundidade todos os parâmetros da fatura que criamos, deviamos ajustá-la a fatura ao qual associamos nossa conta, chegamos à conclusão de que precisamos editar os seguintes parâmetros para ter sucesso na associação da fatura:

• invoiceNumber – Editar o parâmetro para qualquer número não utilizado
• UnitPrice/TotalAmount – Editar o parâmetro para o valor do pagamento que o cliente terá que pagar
• (emailAddress(buyer – Este parâmetro deve ser alterado para o e-mail do comprador a partir da fatura que transferimos para nossa conta
• businessName/firstname/lastname – Este parâmetro devemos alterar para o e-mail do vendedor a partir da fatura que transferimos para nossa conta
• (emailAddress(seller – Este é basicamente o e-mail de quem vai receber o dinheiro no final, então aqui vamos escrever nosso e-mail
• encryptedInvoiceId – Este parâmetro nós alteramos para o token da nossa fatura

que será assim:

Como resultado do envio do recibo para o servidor do PayPal, ele será reassociado e passará a pertencer à conta do atacante e não à conta do vendedor real..

Em termos de UI, no PayPal, antes de fazer o pagamento, nada mudará tanto na conta do comprador quanto na conta do vendedor.

Se o comprador completar o processo de pagamento:

  1. O lado do vendedor – A fatura permanece em modo unpaid.
  2. Lado do comprador – O comprador recebe um e-mail do PayPal informando que o pagamento foi realizado com sucesso e o sistema parece ter feito o pagamento corretamente.
  3. O lado do atacante – O pagamento do comprovante será integralmente válido e até o PayPal cobrará uma taxa pela operação!

Assim, fomos capazes de manipular os recibos comPayPal.
Reportamos ao PayPal e eles responderam com responsabilidade e corrigiram as descobertas.

Outros artigos que você pode ter interesse: