Le 18 juillet 2023, heure de Pékin, Ocean BNO a subi une attaque de prêt éclair, et l'attaquant a réalisé un bénéfice d'environ 500 000 dollars américains.
SharkTeam a effectué une analyse technique de cet incident pour la première fois et a résumé les précautions de sécurité, espérant que les projets de suivi pourront en tirer des leçons et construire conjointement une ligne de défense de sécurité pour l'industrie de la blockchain.
(1) L'attaquant (0xa6566574) a emprunté 286 449 BNO via un prêt flash pancakeSwap.
(2) Appelez ensuite la fonction stakeNft du contrat attaqué (0xdCA50344) pour mettre en gage deux nft.
(3) Appelez ensuite la fonction de gage du contrat attaqué (0xdCA50344) pour mettre en gage 277856 pièces BNO.
(4) Appelez la fonction emergencyWithdraw du contrat attaqué (0xdCA50344) pour extraire tous les BNO
(5) Appelez ensuite la fonction unstakeNft du contrat attaqué (0xdCA50344), récupérez les deux nft gagés et recevez des jetons BNO supplémentaires.
(6) Répétez le processus ci-dessus pour obtenir en continu des jetons BNO supplémentaires
(7) Après avoir remboursé le prêt flash, échangez tous les jetons BNO contre 50,5 W BUSD et quittez le marché avec un profit.
Deuxièmement, analyse de vulnérabilité
La cause première de cette attaque est : il y a un problème avec le mécanisme de calcul de la récompense et la logique d'interaction de la fonction de retrait d'urgence dans le contrat attaqué (0xdCA50344), ce qui amène l'utilisateur à obtenir un jeton de récompense supplémentaire après avoir retiré le principal.
Le contrat fournit la fonction emergencyWithdraw pour le retrait d'urgence des jetons et efface l'hypothèque totale de l'attaquant et la dette totale de la dette de récompense, mais n'efface pas la variable nftAddition de l'attaquant, et la variable nftAddition est également calculée via la variable allstake.
Dans la fonction unstakeNft, la récompense actuelle de l'utilisateur sera toujours calculée, et si la variable nftAddition n'est pas remise à zéro, la fonction pendingFit renverra toujours une valeur de récompense BNO supplémentaire, obligeant l'attaquant à obtenir des jetons BNO supplémentaires.
Troisièmement, recommandations de sécurité
En réponse à cette attaque, nous devons suivre les précautions suivantes pendant le processus de développement :
(1) Lors du calcul des récompenses, vérifiez si l'utilisateur a retiré le principal.
(2) Avant la mise en ligne du projet, il est nécessaire de demander l'assistance technique d'une équipe d'audit professionnelle tierce partie.
Voir l'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.
Analyse de principe de l'événement d'attaque BNO
Le 18 juillet 2023, heure de Pékin, Ocean BNO a subi une attaque de prêt éclair, et l'attaquant a réalisé un bénéfice d'environ 500 000 dollars américains.
SharkTeam a effectué une analyse technique de cet incident pour la première fois et a résumé les précautions de sécurité, espérant que les projets de suivi pourront en tirer des leçons et construire conjointement une ligne de défense de sécurité pour l'industrie de la blockchain.
1. Analyse des événements
Adresse de l'attaquant :
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
Contrat d'attaque :
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
Contrat attaqué :
0xdCA503449899d5649D32175a255A8835A03E4006
Transactions d'attaque :
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
Processus d'attaque :
(1) L'attaquant (0xa6566574) a emprunté 286 449 BNO via un prêt flash pancakeSwap.
(2) Appelez ensuite la fonction stakeNft du contrat attaqué (0xdCA50344) pour mettre en gage deux nft.
(3) Appelez ensuite la fonction de gage du contrat attaqué (0xdCA50344) pour mettre en gage 277856 pièces BNO.
(4) Appelez la fonction emergencyWithdraw du contrat attaqué (0xdCA50344) pour extraire tous les BNO
(5) Appelez ensuite la fonction unstakeNft du contrat attaqué (0xdCA50344), récupérez les deux nft gagés et recevez des jetons BNO supplémentaires.
(6) Répétez le processus ci-dessus pour obtenir en continu des jetons BNO supplémentaires
(7) Après avoir remboursé le prêt flash, échangez tous les jetons BNO contre 50,5 W BUSD et quittez le marché avec un profit.
Deuxièmement, analyse de vulnérabilité
La cause première de cette attaque est : il y a un problème avec le mécanisme de calcul de la récompense et la logique d'interaction de la fonction de retrait d'urgence dans le contrat attaqué (0xdCA50344), ce qui amène l'utilisateur à obtenir un jeton de récompense supplémentaire après avoir retiré le principal.
Le contrat fournit la fonction emergencyWithdraw pour le retrait d'urgence des jetons et efface l'hypothèque totale de l'attaquant et la dette totale de la dette de récompense, mais n'efface pas la variable nftAddition de l'attaquant, et la variable nftAddition est également calculée via la variable allstake.
Dans la fonction unstakeNft, la récompense actuelle de l'utilisateur sera toujours calculée, et si la variable nftAddition n'est pas remise à zéro, la fonction pendingFit renverra toujours une valeur de récompense BNO supplémentaire, obligeant l'attaquant à obtenir des jetons BNO supplémentaires.
Troisièmement, recommandations de sécurité
En réponse à cette attaque, nous devons suivre les précautions suivantes pendant le processus de développement :
(1) Lors du calcul des récompenses, vérifiez si l'utilisateur a retiré le principal.
(2) Avant la mise en ligne du projet, il est nécessaire de demander l'assistance technique d'une équipe d'audit professionnelle tierce partie.