Slow Mist : une brève analyse du piratage de Stars Arena

arrière-plan

Selon l'avertissement de sécurité du système SlowMist MistEye, le 7 octobre 2023, Stars Arena, le protocole social de la chaîne Avalanche, a été attaqué, causant une perte d'environ 2,9 millions de dollars. L'équipe de sécurité de SlowMist a brièvement analysé l'incident d'attaque et a partagé les résultats comme suit.

Informations connexes

Adresse de l'attaquant :

Contrat d'attaque :

Transaction d'attaque :

Noyau d'attaque

L'attaquant exploite la vulnérabilité de réentrée pour falsifier le prix correspondant à sa part de dépôt. Plus tard, lors de la vente, une manipulation de prix similaire s'est produite en raison de la dépendance du calcul du prix à l'égard de la manipulation malveillante. En calculant avec précision le cours de l'action mis à jour lors de la réentrée, l'attaquant vole les fonds du contrat.

Analyse des transactions

On peut constater qu'il y a un appel réentrant dans la transaction d'attaque, et on analyse progressivement la méthode appelante en décompilant le code.

L'attaquant a d'abord créé des contrats d'attaque (0x7f283 et 0xdd9af), appelés la méthode 0xe9ccf3a3 de Stars Arena : partage le contrat via le contrat d'attaque, puis a déposé 1 jeton AVAX.

D'après le suivi étape par étape du code décompilé, la méthode 0xe9ccf3a3 utilisée en premier par l'attaquant est une fonction similaire à un dépôt, qui appelle les méthodes 0x326c et 0x2058. La méthode 0x326c n'est qu'un appel renvoyé en paramètre, tandis que la méthode 0x2058 est similaire à une fonction qui gère l'achat ou l'échange d'un certain jeton. Cette méthode utilise le montant du jeton AVAX et l'adresse transmise dans 0xe9ccf3a3 pour effectuer l'opération suivante. , partage et frais. calculer.

En suivant la logique d'appel de la ligne 92 de la méthode 0x2058, nous pouvons constater que la méthode 0x1a9b est une fonction de calcul.Le résultat calculé est une valeur similaire au prix, et sa valeur de retour est le v24 / 0xde0b6b3a7640000 ou _initialPrice nouvellement calculé.

Il existe des appels de bas niveau dans les méthodes 0x307c et 0x30ef sur les lignes 109, 110 et 116, et l'appel de 0x30ef est toujours un appel externe à g1, qui est l'adresse entrante du contrat d'attaque 0xdd9af. La fonction n'a pas de contraintes de verrouillage anti-réentrance, et une fois l'appel externe exécuté, cette méthode exécutera le jugement if suivant pour mettre à jour les paramètres field0.length et field0. Il ne fait aucun doute que la réentrée se produit ici.

Examinons les données construites par l'attaquant lors de l'appel réentrant.

L'appel externe réentrant est la méthode 0x5632b2e4, et 4 paramètres construits par l'attaquant sont transmis. Ces paramètres sont convertis en 91000000000 par conversion hexadécimale.

Comme mentionné ci-dessus, l'appel externe à la méthode 0x5632b2e4 est exécuté avant le jugement if (g0 == _getMyShares[address(g1)][msg.sender]). À l’heure actuelle, la valeur de field0.length est 0 et n’a pas été mise à jour. L'attaquant a simplement utilisé cette méthode pour contourner le jugement de la méthode 0x5632b2e4 et a modifié les quatre états de paramètres suivants de msg.sender, qui est le contrat d'attaque 0xdd9af, en données construites lors de l'appel externe.

Après les opérations ci-dessus, l'attaquant a appelé sellShares pour vendre sa part et a obtenu 266 102,97278 AVAX.

En approfondissant la fonction sellShares, la fonction a d'abord appelé la méthode 0x1a9b, et il y a eu un appel dans la méthode 0x2058 précédente, qui est une fonction qui gère l'achat ou l'échange de certains jetons. Nous pouvons constater que la méthode 0x2329 dans la méthode 0x1a9b mettra à jour le propriétaire_9f [g0] , et ce paramètre a été modifié à 91000000000 construit par l'attaquant lors de la rentrée.

Revenez à la méthode 0x1a9b et recalculez en fonction de la valeur précédemment construite de manière malveillante (voir les commentaires pour le montant du calcul).

Après le calcul ci-dessus, le prix correspondant à l'action nouvellement calculée a changé et le résultat calculé est de 274 333,061476814e18. Après une série de collectes de frais, l'attaquant a utilisé une construction malveillante pour manipuler le prix sans modifier les actions, a vendu les actions et a réussi à réaliser un profit.

Résumer

Le cœur de cette attaque réside dans la mise à jour de la dépendance du calcul des prix provoquée par l’attaque de réentrance, qui à son tour conduit à une manipulation malveillante des prix similaire. L'équipe de sécurité de SlowMist recommande que les parties au projet fassent de leur mieux pour se soumettre à des audits par plusieurs sociétés de sécurité avant de déployer et de publier le contrat ; en même temps, la spécification de codage Contrôles-Effets-Interactions doit être respectée autant que possible lors du codage, et des verrous anti-rentrée devraient être ajoutés.

Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • Commentaire
  • Partager
Commentaire
0/400
Aucun commentaire
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)