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
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.
  • Récompense
  • Commentaire
  • Partager
Commentaire
0/400
Aucun commentaire
  • Épingler
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)