Skip to content

Latest commit

 

History

History
69 lines (45 loc) · 5.01 KB

File metadata and controls

69 lines (45 loc) · 5.01 KB

Depuração de Transações OnChain: 6. Análise do Projeto CirculateBUSD Rugpull, Perda de $2,27 Milhões!

Autor: Numen Cyber Technology

Introdução

De acordo com o monitoramento OnChain da NUMEN, em 12 de janeiro de 2023 às 14:22:39 (horário de Singapura), o projeto CirculateBUSD realizou um rugpull, resultando em uma perda de $2,27 milhões. A transferência de fundos do projeto foi principalmente realizada pelo administrador através da chamada da função CirculateBUSD.startTrading, onde o principal parâmetro de verificação é o valor retornado pela função não open-source SwapHelper.TradingInfo. Em seguida, os fundos foram transferidos através da chamada da função SwapHelper.swaptoToken.

Cover

Análise do Evento

  • Primeiro, a função startTrading do contrato foi chamada, e dentro dessa função foi chamada a função TradingInfo do contrato SwapHelper, como mostrado no código abaixo.
Cover

Cover

A imagem acima mostra a pilha de chamadas da transação, e combinando com o código, podemos ver que TradingInfo é apenas uma chamada estática, e o problema chave não está nessa função. Continuando a análise, encontramos as operações approve e safeapprove na pilha de chamadas. Em seguida, a função swaptoToken do contrato SwapHelper é chamada, e combinando com a pilha de chamadas, percebemos que essa é uma função chave onde a transferência de fundos é executada. Através das informações na blockchain, descobrimos que o contrato SwapHelper não é open-source, e o endereço específico é: https://bscscan.com/address/0x112f8834cd3db8d2dded90be6ba924a88f56eb4b#code

  • Vamos tentar fazer uma análise reversa.

    1. Primeiro, localizamos a assinatura da função 0x63437561.
    Cover
    1. Localizamos a função descompilada, e como vimos que a transferência foi acionada na pilha de chamadas, tentamos procurar palavras-chave como transfer.
    Cover
    1. Localizamos esse trecho do código da função, começando com stor_6_0_19, e o extraímos.
    Cover
    1. Agora temos o endereço de transferência to, 0x0000000000000000000000005695ef5f2e997b2e142b38837132a6c3ddc463b7, que é o mesmo endereço de transferência na pilha de chamadas.
    Cover
    1. Analisando cuidadosamente o fluxo de controle do if e else dessa função, percebemos que se o if for verdadeiro, é uma troca normal. Porque através do slot, sabemos que stor5 é 0x00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e, que é o contrato pancakerouter. A função de backdoor está no else, e basta passar um parâmetro igual ao valor armazenado no slot7 stor7 para acioná-la.
    Cover
    1. Essa função é responsável por modificar o valor armazenado no slot7, e só pode ser acionada pelo owner do contrato.
    Cover

    Todas as análises acima são suficientes para concluir que se trata de um caso de rugpull por parte do projeto.

Conclusão

O laboratório NUMEN lembra aos usuários que ao investir, é necessário realizar uma auditoria de segurança nos contratos dos projetos. Contratos não verificados podem conter funcionalidades que dão ao projeto permissões excessivas ou afetam diretamente a segurança dos ativos dos usuários. Os problemas encontrados neste projeto são apenas a ponta do iceberg no ecossistema blockchain como um todo. Ao investir e desenvolver projetos, é essencial realizar uma auditoria de segurança no código. A NUMEN está focada em garantir a segurança do ecossistema web3.