Condições de corrida: recompensas de bugs

Dec 25 2022
As vulnerabilidades de condições de corrida, na minha opinião, são uma das vulnerabilidades da web mais interessantes. Eles surgem dos erros mais simples que os desenvolvedores cometem e esses erros custam caro.

As vulnerabilidades de condições de corrida, na minha opinião, são uma das vulnerabilidades da web mais interessantes. Eles surgem dos erros mais simples que os desenvolvedores cometem e esses erros custam caro.

No passado, os hackers usaram condições de corrida para roubar dinheiro de bancos online, sites de troca de criptomoedas, sites de comércio eletrônico e muito mais.

Quais são as condições de corrida?

  • As condições de corrida surgem quando duas seções de código projetadas para serem executadas em sequência são executadas fora de sequência.
  • Para entender melhor essas vulnerabilidades, você deve primeiro entender o conceito de simultaneidade.
  • Na programação de computadores, simultaneidade é a capacidade de executar diferentes partes do código simultaneamente sem afetar o resultado do programa.
  • A simultaneidade tem dois tipos: multiprocessamento e multithreading.
  • Multiprocessamento refere-se ao uso de várias CPUs para executar tarefas simultâneas.
  • No entanto, multithreading é quando uma única CPU executa as tarefas simultâneas usando “threads”. No entanto, esses threads não são executados ao mesmo tempo; eles se revezam usando a energia da CPU. Quando um thread está ocioso, outros threads podem continuar aproveitando os recursos de computação não utilizados. Organizar a sequência de execução de vários threads é chamado de escalonamento.
  • Esse agendamento é o que causa as condições de corrida.
  • Uma condição de corrida torna-se uma vulnerabilidade quando afeta um mecanismo de controle de segurança.
  • Imagine que duas threads estão executando a transferência de dinheiro entre contas bancárias. O aplicativo teria que realizar três tarefas para transferir o dinheiro corretamente. Primeiro, ele verifica se a conta de origem tem dinheiro suficiente, depois adiciona o dinheiro à conta de destino e, por último, subtrai o valor da conta de origem.

FIO 1

  1. Verifique o saldo da conta de A(>100$); 2. Adicione 100$ à conta B; 3. Deduza $ 100 da conta A
  1. Verifique o saldo da conta de A (<100$) => Falha na transferência, fundos insuficientes.
  1. [Tópico 1] Verifique o saldo da conta A (100$);
  2. [Tópico 2] Verifique o saldo da conta A (100$);
  3. [Tópico 1] Adicione $ 500 à conta B; [100$ em A, 100$ em B]
  4. [Tópico 2] Adicione $ 500 à conta B; [100$ em A, 200$ em B]
  5. [Tópico 1] Deduzir $ 500 da conta A; [0$ em A; 200$ em B]
  6. [Tópico 2] Deduzir $ 500 da conta A; [0$ em A; 200$ em B]

Embora as vulnerabilidades das condições de corrida estejam associadas principalmente a sites financeiros, os hackers também podem usá-las em outras situações, como fraudar campanhas de votação online.

Como prevenir

O conceito de sincronização é importante quando se trata de simultaneidade na programação. Envolve garantir que threads ou processos não acessem recursos compartilhados simultaneamente, pois isso pode levar a condições de corrida e inconsistências de dados. Uma maneira de obter a sincronização é por meio do uso de bloqueios de recursos, que impedem que outros threads acessem um recurso até que o thread que mantém o bloqueio termine com ele.

Além da sincronização, também é importante seguir as práticas de codificação segura para evitar que as condições de corrida se tornem problemas de segurança mais graves. O princípio do menor privilégio é uma dessas práticas, que envolve conceder a aplicativos e processos apenas os privilégios de que precisam para concluir suas tarefas. Por exemplo, se um aplicativo precisa apenas ler um arquivo, ele não deve receber permissões de gravação ou execução. Isso reduz os riscos de comprometimento do sistema durante um ataque.

Como caçar?

1. Encontre recursos propensos a condições de corrida:

  • As condições de corrida geralmente ocorrem em recursos que envolvem a atualização de valores numéricos, como votação online, pontuações de jogos, transferências bancárias, pagamentos de comércio eletrônico e saldos de cartões-presente. Para identificar esses recursos em um aplicativo, você pode procurar solicitações envolvidas na atualização desses números. Por exemplo, se você deseja testar a solicitação usada para transferir dinheiro de um site bancário, pode copiar a solicitação usando o Burp Suite clicando com o botão direito do mouse e selecionando “Copiar como comando curl”.
  • Para testar e potencialmente explorar as condições de corrida em um destino, você pode enviar várias solicitações ao servidor ao mesmo tempo. Por exemplo, se você deseja verificar se é possível transferir mais dinheiro do que tem em sua conta bancária, pode usar o comando curl para enviar várias solicitações de transferência simultaneamente. Uma maneira de fazer isso é copiar o comando do Burp, colá-lo no terminal e inserir um símbolo “&” entre cada comando. Isso permitirá que você execute vários comandos simultaneamente em segundo plano em um sistema Linux.
  • curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
    & curl (transfer $3000) & curl (transfer $3000) & curl (transfer $3000)
    

  • Este é um acéfalo, verifique se o seu ataque foi bem-sucedido

É importante considerar o impacto potencial de uma condição de corrida na funcionalidade afetada ao avaliar a gravidade da vulnerabilidade. Uma condição de corrida que permite a um invasor obter acesso ilimitado a recursos financeiros, como por meio de retirada de dinheiro ou transferência de fundos, pode ser altamente prejudicial tanto para os indivíduos afetados quanto para a organização.

Além do ganho financeiro, um invasor pode usar uma condição de corrida para obter influência social ou acesso a informações confidenciais. Por exemplo, uma condição de corrida que permite que um invasor obtenha acesso não autorizado a uma conta de mídia social pode ser usada para espalhar informações incorretas ou manipular a opinião pública.

Ao relatar o impacto de uma condição de corrida, é importante articular claramente as possíveis consequências para os indivíduos afetados e para a organização. Isso pode incluir a perda financeira potencial, perda de informações confidenciais ou danos à reputação da organização. Fornecer informações claras e detalhadas sobre o possível impacto da vulnerabilidade pode ajudar a priorizar sua resolução e mitigar as possíveis consequências.

Espero que esta postagem no blog tenha ajudado! Boa caça e feliz Natal!