Análise do princípio do evento de ataque BNO

Em 18 de julho de 2023, horário de Pequim, o Ocean BNO sofreu um ataque de empréstimo instantâneo e o invasor obteve um lucro de cerca de 500.000 dólares americanos.

20230718161919783image.png

A SharkTeam realizou uma análise técnica deste incidente pela primeira vez e resumiu as precauções de segurança, esperando que os projetos de acompanhamento possam aprender com isso e construir em conjunto uma linha de defesa de segurança para a indústria de blockchain.

1. Análise de eventos

Endereço do atacante:

0xa6566574edc60d7b2adbacedb71d5142cf2677fb

Contrato de ataque:

0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd

Contrato atacado:

0xdCA503449899d5649D32175a255A8835A03E4006

Transações de ataque:

0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9

Processo de ataque:

(1) O invasor (0xa6566574) emprestou 286.449 BNOs por meio do empréstimo flash pancakeSwap.

20230718161449018image.png

(2) Em seguida, chame a função stakeNft do contrato atacado (0xdCA50344) para prometer duas nft.

20230718161457306image.png

(3) Em seguida, chame a função de penhor do contrato atacado (0xdCA50344) para penhorar 277856 moedas BNO.

20230718161633397image.png

(4) Chame a função EmergencyWithdraw do contrato atacado (0xdCA50344) para extrair todos os BNO

20230718161641122image.png

(5) Em seguida, chame a função unstakeNft do contrato atacado (0xdCA50344), recupere os dois nft prometidos e receba tokens BNO adicionais.

20230718161732948image.png

(6) Repita o processo acima para obter continuamente tokens BNO adicionais

20230718161752651image.png

(7) Depois de pagar o empréstimo flash, troque todos os tokens BNO por BUSD de 50,5 W e saia do mercado com lucro.

20230718161800166image.png

Segundo, análise de vulnerabilidade

A causa raiz desse ataque é: há um problema no mecanismo de cálculo de recompensa e na lógica de interação da função de retirada de emergência no contrato atacado (0xdCA50344), que faz com que o usuário receba um token de recompensa adicional após a retirada do principal.

20230718161812689image.png

20230718161820027image.png

O contrato fornece a função EmergencyWithdraw para retirada de emergência de tokens e limpa a hipoteca total allstake e a dívida total rewardDebt do invasor, mas não limpa a variável nftAddition do invasor, e a variável nftAddition também é calculada por meio da variável allstake.

20230718161834850image.png

Na função unstakeNft, a recompensa atual do usuário ainda será calculada e, se a variável nftAddition não for zerada, a função pendingFit ainda retornará um valor adicional de recompensa BNO, fazendo com que o invasor obtenha tokens BNO adicionais.

20230718161842539image.png

Terceiro, recomendações de segurança

Em resposta a este ataque, devemos seguir os seguintes cuidados durante o processo de desenvolvimento:

(1) Ao calcular recompensas, verifique se o usuário retirou o principal.

(2) Antes de colocar o projeto online, é necessário buscar assistência técnica de uma equipe de auditoria profissional terceirizada.

Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • Comentar
  • Partilhar
Comentar
0/400
Nenhum comentário
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)