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.

20230718161919783image.png

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.

20230718161449018image.png

(2) Appelez ensuite la fonction stakeNft du contrat attaqué (0xdCA50344) pour mettre en gage deux nft.

20230718161457306image.png

(3) Appelez ensuite la fonction de gage du contrat attaqué (0xdCA50344) pour mettre en gage 277856 pièces BNO.

20230718161633397image.png

(4) Appelez la fonction emergencyWithdraw du contrat attaqué (0xdCA50344) pour extraire tous les BNO

20230718161641122image.png

(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.

20230718161732948image.png

(6) Répétez le processus ci-dessus pour obtenir en continu des jetons BNO supplémentaires

20230718161752651image.png

(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.

20230718161800166image.png

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.

20230718161812689image.png

20230718161820027image.png

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.

20230718161834850image.png

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.

20230718161842539image.png

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
Avertissement : Les informations contenues dans cette page peuvent provenir de tiers et ne représentent pas les points de vue ou les opinions de Gate. Le contenu de cette page est fourni à titre de référence uniquement et ne constitue pas un conseil financier, d'investissement ou juridique. Gate ne garantit pas l'exactitude ou l'exhaustivité des informations et n'est pas responsable des pertes résultant de l'utilisation de ces informations. Les investissements en actifs virtuels comportent des risques élevés et sont soumis à une forte volatilité des prix. Vous pouvez perdre la totalité du capital investi. Veuillez comprendre pleinement les risques pertinents et prendre des décisions prudentes en fonction de votre propre situation financière et de votre tolérance au risque. Pour plus de détails, veuillez consulter l'avertissement.
Commentaire
0/400
Aucun commentaire