Em 08 de novembro de 2022, detectamos que alguns ataques drenaram com sucesso ativos de pools construídas sobre o contrato oficial KashiPairMediumRiskV1 da Sushi (ou alguns contratos que o bifurcaram). Após investigação, descobrimos que a causa raiz é um bug de lógica que causa o cálculo incorreto dos preços dos tokens.
Imediatamente entramos em contato com a equipe de segurança da Sushi, e eles confirmaram nossas descobertas. O lado positivo foi que eles estavam tomando medidas para proteger algumas pools valiosas, mas vulneráveis, de serem atacadas. Além disso, eles também forneceram procedimentos para compensar aqueles que perderam fundos com o exploit. Sendo assim, acreditamos agora que é seguro divulgar os detalhes sobre a vulnerabilidade e os ataques. Neste relatório, gostaríamos de fornecer uma análise detalhada.
Análise de Vulnerabilidade
Após analisar o código-fonte do contrato KashiPairMediumRiskV1, concluímos que este bug está na função borrow, que usa o exchangeRate desatualizado para verificar a parcela do empréstimo no modificador solvent. Especificamente, a verificação será realizada com base no valor atual de exchangeRate na função _isSolvent.


Já na função liquidate, a função updateExchangeRate é invocada logo no início. Portanto, a verificação e o cálculo serão realizados com base no valor atualizado.


Obviamente, esse bug poderia ser explorado para causar uma diferença de preço (enorme).
Análise do Ataque
Observamos dois ataques:
- 0xcf8f242ea83100b6d43e659f7f53a698d304fc6ac2ca6fe79e3e07ee05fefe58: a vítima usa o contrato KashiPairMediumRiskV1, e a perda foi de aproximadamente 9.466 USDC.
- 0x3d163bfbec5686d428a6d43e45e2626a220cc4fcfac7620c620b82c1f2537c78: a vítima é um contrato de estratégia que usa o CauldronMediumRiskV1 (o fork do KashiPairMediumRiskV1), e a perda foi de aproximadamente 110.911 MIM.
Observe que a primeira transação de ataque foi lançada por um bot que fez front-run da transação de ataque original: 0x7a845d8d2af7919f5b9e22dd5571305cb5347d17986a8402715c1463d515fc18, e o endereço do atacante original é 0xb7ea0f0f8c6df7a61bf024db21bbe85ac5688005.
Aqui tomamos a primeira transação de ataque como exemplo, que consiste nas seguintes etapas:
- Tomando um flashloan de 40.900 BADGER e 121.904 USDC do
Balancer. - Depositando 40.900 BADGER e 113.599 USDC no
BentoBox. - Invocando a função
addCollateraldo kmBADGER/USDC-LINK para depositar 40.900.000.000.000.000.000.000 shares de BADGER. - Invocando a função
addAssetdo kmBADGER/USDC-LINK para depositar 112.529.000.000 shares de USDC. - Invocando a função
borrowpara tomar emprestado 120.755.095.093 shares de USDC. - Invocando a função
UpdateExchangeRate. - Invocando a função
liquidatepara liquidar a si mesmo. - Retirando 40.899 BADGER e 123.006 USDC do
BentoBox. - Repagando o flashloan e obtendo um lucro de aproximadamente 9.466 USDC.
Observe que o passo 6 não é necessário, pois a função
borrowinvocará a funçãoUpdateExchangeRate.
As etapas principais são as seguintes:
Não é difícil perceber que o valor de exchangeRate usado na função borrow diverge do valor usado na função liquidate:
- Na função
borrow: 250.997.938.545.109.237.740.214.705.193 - Na função
liquidate: 328.266.883.541.864.569.505.752.156.794
O Impacto
Dezenas de pools (tanto na Ethereum quanto na BSC) podem ser afetadas por esse bug. Um método temporário para mitigar esse problema é reduzir ou eliminar o desvio invocando a função UpdateExchangeRate ocasionalmente (ou periodicamente). Esse método já foi adotado por muitos projetos afetados e as transações correspondentes podem ser observadas na rede.
Lição Aprendida
Tornar um projeto DeFi seguro não é uma tarefa fácil. Além da auditoria de código, acreditamos que a comunidade deve adotar um método proativo para monitorar o status do projeto e bloquear o ataque antes mesmo que ele aconteça.
Sobre a BlockSec
A BlockSec é uma empresa pioneira em segurança de blockchain, fundada em 2021 por um grupo de especialistas em segurança de renome global. 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 para contratos inteligentes e chains EVM, a plataforma Phalcon para desenvolvimento seguro e bloqueio proativo de ameaças, a plataforma MetaSleuth para rastreamento e investigação de fundos, e a extensão MetaDock para builders Web3 que navegam com eficiência no mundo cripto.
Até o momento, a empresa atendeu mais de 300 clientes renomados, 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 de destaque, incluindo Matrix Partners, Vitalbridge Capital e Fenbushi Capital.
Site oficial: https://blocksec.com/
Conta oficial no Twitter: https://twitter.com/BlockSecTeam



