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.
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) O invasor (0xa6566574) emprestou 286.449 BNOs por meio do empréstimo flash pancakeSwap.
(2) Em seguida, chame a função stakeNft do contrato atacado (0xdCA50344) para prometer duas nft.
(3) Em seguida, chame a função de penhor do contrato atacado (0xdCA50344) para penhorar 277856 moedas BNO.
(4) Chame a função EmergencyWithdraw do contrato atacado (0xdCA50344) para extrair todos os BNO
(5) Em seguida, chame a função unstakeNft do contrato atacado (0xdCA50344), recupere os dois nft prometidos e receba tokens BNO adicionais.
(6) Repita o processo acima para obter continuamente tokens BNO adicionais
(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.
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.
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.
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.
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.
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.
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.
(2) Em seguida, chame a função stakeNft do contrato atacado (0xdCA50344) para prometer duas nft.
(3) Em seguida, chame a função de penhor do contrato atacado (0xdCA50344) para penhorar 277856 moedas BNO.
(4) Chame a função EmergencyWithdraw do contrato atacado (0xdCA50344) para extrair todos os BNO
(5) Em seguida, chame a função unstakeNft do contrato atacado (0xdCA50344), recupere os dois nft prometidos e receba tokens BNO adicionais.
(6) Repita o processo acima para obter continuamente tokens BNO adicionais
(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.
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.
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.
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.
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.