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
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
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.