Le 14 mars 2024, selon une alerte précoce du système de surveillance de sécurité SlowMist MistEye, le protocole de prêt décentralisé MOBOX sur la chaîne Optimism a été attaqué, entraînant une perte d'environ 750 000 $ US. L'équipe de sécurité de SlowMist a analysé l'incident de l'attaque et a partagé les résultats comme suit :
Attaquant address:0x4e2c6096985e0b2825d06c16f1c8cdc559c1d6f80x96f004c81d2c7b907f92c45922d38ab870a53945
0xae7b6514af26bcb2332fea53 b8dd57bc13a7838e
Attacking transaction:
0x4ec3061724ca9 f0b8d400866dd83b92647ad8c943a1c0ae9ae6c9bd1ef789417
Attack the core
Cette attaque comporte deux points principaux. Le premier est que l'attaquant exploite la vulnérabilité de la fonction Bore() dans le contrat. Chaque fois que cette fonction est appelée, la distribution de la récompense à l'adresse du recommandateur sera déclenchée. Étant donné que le calcul de la récompense est basé sur le nombre de jetons transférés, l'attaquant peut augmenter le montant du prochain emprunt en transférant à nouveau la récompense au référent vers le contrat attaqué. La seconde est que chaque fois que la fonction Bore() est appelée, une partie des jetons MO du pool sera brûlée, de sorte que le prix des jetons MO augmente continuellement. En fin de compte, l'attaquant peut réaliser des bénéfices en empruntant et en continu. superposer les récompenses.
Analyse des transactions
Nous pouvons constater que l'ensemble du processus d'attaque passe principalement par la boucle appelant la fonction Bore() avec des failles, puis appelant immédiatement Redemption() pour le rachat, puis attribuant les jetons au recommandataire. Revenir au contrat d'attaque.
En suivant la fonction Bore() pour analyse, nous pouvons constater qu'à chaque fois que cette fonction est appelée, une partie des jetons MO du pool sera brûlée.
Cependant, le montant de l'USDT prêté est calculé en fonction du prix des jetons MO dans le pool. Étant donné que le prix des jetons MO continue d'augmenter en raison de la gravure, l'attaquant peut éventuellement emprunter une petite quantité de jetons MO. un certain nombre de jetons USDT ont été émis.
De plus, chaque emprunt donnera à une adresse de référence une récompense en dividendes, et la fonction est calculée en fonction du nombre de jetons MO transmis.
Cependant, puisque l'adresse du référent est également contrôlée par l'attaquant (0x96f004c81d2c7b907f92c45922d38ab870a53945), l'attaquant peut retransférer cette partie de la récompense après avoir terminé l'opération de prêt, superposant ainsi le montant du prochain prêt et le dividende. récompense .
Après l'opération de cycle ci-dessus, l'attaquant a augmenté le prix des jetons MO et a finalement pu utiliser une très petite quantité de jetons MO pour prêter une grande quantité d'USDT dans le contrat, et déséquilibrer directement l'échange. USDT hors du pool et repartez avec un profit.
Le cœur de cette attaque est que l'attaquant utilise la fonction emprunter() pour brûler certains jetons du pool, emprunter continuellement des actifs, augmenter le prix des jetons dans le pool, et obtenir des recommandations. Les gens récompensent les gens, puis transfèrent les jetons et les empruntent à nouveau, ajoutant ainsi continuellement des récompenses et manipulant les prix. L'équipe de sécurité de SlowMist recommande aux parties au projet d'ajouter des délais de blocage à des fonctions similaires et de prendre en compte plusieurs facteurs lors de la conception du modèle de prix des prêts afin d'éviter que des incidents similaires ne se reproduisent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!