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:
- 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.
- Cada vez enviamos uma lista de 10.000.000 tokens para um dos servidores de força bruta em nossa fila de servidores.
- Se um dos servidores encontrar um token, ele a retorna ao servidor de administração para a lista de tokens existentes.
O servidor operacional:
- Obtém uma lista de 10.000.000 de tokens e começa a executar brute force.
- Se encontrar captcha- adiciona o parâmetro Z3JncnB0= Na barra de endereço.
- Se o endereço IP do servidor estiver bloqueado, um endereço IP é substituído usando ZoroVPN.
- Se encontrarmos um token existente, envie para o servidor do administrador.
- 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:
- O lado do vendedor – A fatura permanece em modo unpaid.
- 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.
- 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.