Back to Blog

[Nem Todos os Tokens São Bons] Análise Rápida do Ataque Paraluni

Code Auditing
March 13, 2022
3 min read

O projeto Paraluni foi atacado na manhã do dia 13 de março (horário UTC +8). O atacante explorou duas vulnerabilidades para atacar o protocolo. A primeira vulnerabilidade é a falta de verificação dos tokens passados, e a segunda é o tradicional reentrancy. O atacante realizou algumas transações de ataque. A seguir, usaremos uma delas 0xf2bba649019ce40a67f0fb74e5e800257d359d9094b6ba6faea14ffa4d3446b1 para ilustrar todo o processo de ataque.

Etapa I: adicionar liquidity ao paraRouter

O atacante invocou addLiquidity no pool BTCB-WBNB (índice = 9) e o pool irá cunhar o token lp para UBT (um token criado pelo atacante). Após esta operação, o token UBT detém o token lp do pool. Note que o BTCB e o WBNB são emprestados via flash loan.

Etapa II: invocar depositByAddLiquidity do MasterChef O atacante invocou depositByAddLiquidity fornecendo o _pid como 9 e usando os tokens UGT e UBT como parâmetros. No entanto, a função não verifica se os tokens de reserva do pool são iguais aos tokens passados (UGT e UBT).

Em seguida, a função invoca o depositByAddLiquidityInternal, que por sua vez invoca addLiquidity do paraRouter. Esta função irá invocar a função transferFrom dos tokens UGT e UBT. No entanto, esses dois tokens são controlados pelo atacante. Na função transferFrom do UBT, o atacante invocou a função deposit do contrato MasterChef para depositar o token LP obtido na primeira etapa no contrato MasterChef.

Infelizmente, devido à mudança de saldo na função deposit, o newBalance após o addLiquidity é muito maior do que o oldBalance. Dessa forma, o atacante obteve créditos duplicados no contrato MasterChef.

Etapa III: obter lucro

O atacante finalmente invocou UBT.withdrawAsset e MasterChef.withdraw para resgatar o lptoken e obter BTCB e WBNB. Como a quantidade de liquidez é maior do que o atacante deveria ter, o atacante obterá lucros.

Lições

Além do problema de reentrancy, a falta de verificação dos tokens passados é uma das causas raiz. Já vimos outros casos com problema semelhante, como no caso Visor e no caso Coin98.

Sobre a BlockSec

A BlockSec é uma empresa pioneira em segurança blockchain fundada em 2021 por um grupo de especialistas em segurança de renome mundial. A empresa está comprometida em aprimorar a segurança e a usabilidade para o emergente mundo Web3, a fim de facilitar sua adoção em massa. Para isso, a BlockSec oferece serviços de auditoria de segurança de contratos inteligentes e chains EVM, a plataforma Phalcon para desenvolvimento de segurança e bloqueio proativo de ameaças, a plataforma MetaSleuth para rastreamento e investigação de fundos, e a extensão MetaSuites para construtores web3 que navegam com eficiência no mundo cripto.

Até o momento, a empresa atendeu mais de 300 clientes de prestígio, como MetaMask, Uniswap Foundation, Compound, Forta e PancakeSwap, e recebeu dezenas de milhões de dólares americanos em duas rodadas de financiamento de investidores proeminentes, incluindo Matrix Partners, Vitalbridge Capital e Fenbushi Capital.

Site oficial: https://blocksec.com/

Conta oficial no Twitter: https://twitter.com/BlockSecTeam

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit