
Source: Sharkteam
Le 30 janvier 2024, MIM_Spell a été attaqué par Lightning Loan.
Sharkteam a effectué une analyse technique de l’incident dès que possible et a résumé les moyens de précautions de sécurité.
1. Analyse des transactions d’attaque
Adresse d’attaque:
0x87f585809CE79AE39A5FA0C7C96D0D159EB678C9
Contrat d’attaque:
0xe1091d17473b049cccd65c54f71677da85b77a45
0x13af445f81b0deca5dcb2be6c691f545c95912
0XE59B54A9E37AB69F6E9312A9B3F7253EE184E5A
Être attaqué Contrat:
0x7259E152103756E1616A77AE982353C3751A6A90
Transaction d’attaque:
0x26a83db7e288838dd9fee6fb7314ae58dcc6aee9a20bf224c386ff5e80f7e4cf2
0xDB4616B89AD82062787A4E924D520639791302476484B9A6ECA5126F79B6D8777
Processus d’attaque:
1. L’attaquant (0x87f58580) a emprunté 300 000 jetons MIM par le prêt Lightning.
2. Envoyez ensuite 2 40 000 jetons MIM au contrat attaqué (0x7259E1520) pour la prochaine étape pour rembourser l’emprunt des utilisateurs.
3. L’attaquant (0x87f58580) a ensuite appelé la fonction REPAYFRALL pour rembourser l’emprunt des autres utilisateurs, puis a appelé la fonction de remboursement pour rembourser l’emprunt des autres utilisateurs dans l’ordre.
4. Une fois que les variables élastiques sont réduites à 0, l’attaquant (0x87f58580) crée un nouveau contrat d’attaque (0xe59b54a9) et appelle en continu les appels d’emprunter et la fonction de remboursement jusqu’à l’élastique = 0, base = 1200801838188666666521504972888.
5. Attaquant ultérieur (0x87F58580) appelle la fonction de retrait de la fonction d’emprunté et du contrat de Degenbox emprunté 5000047 jetons MIM.
6. L’attaquant (0x87f58580) a renvoyé la fonction de prêt Lightning et a converti 4400 000 jetons MIM à 1807 eth, et cette transaction a réalisé un bénéfice d’environ 450W.
Deuxièmement, analyse de vulnérabilité
L’essence de l’attaque est que la précision de la variable d’emprunt est calculée, de sorte que la proportion de valeurs élastiques et de base variables clés est déséquilibrée, entraînant des problèmes lors du calcul du nombre de prêts hypothécaires et d’emprunts, et finalement emprunté au jeton MIM.
La fonction empruntée et la fonction de remboursement dans le contrat attaqué (0x7259e1520) utilisent la méthode ascendante pour calculer les deux variables de l’élastique et de la base.
L’attaquant (0x87f58580) a d’abord réglé les variables élastiques et les variables de base sur 0 et 97 en remboursant un autre emprunt de l’utilisateur.
Par la suite, la fonction emprunter et la fonction de remboursement sont appelées en continu et le montant du paramètre est 1. Lorsque la fonction emprunter appelle d’abord la fonction emprunter, la logique ci-dessus sera exécutée et renvoyée à la fonction ADD lorsque Elastic = 0.Cela provoquera l’élastique = 1, base = 98.
L’attaquant (0x87f58580) appelle ensuite la fonction d’emprunté et transmis en 1. Étant donné que Elastic = 1 exécutera une autre logique, la valeur de retour calculée est 98. Lorsque vous retournez à la fonction ADD, Elastic = 2, la variable de base est 196.
Mais à ce moment-là, l’attaquant (0x87f58580) a appelé la fonction de remboursement et transmis dans 1. Depuis Elastic = 2, la logique ELSE sera exécutée. changement variable en arrière 1 et la variable de base est de 195.
On peut voir qu’après avoir connu la boucle d’emprunté, les variables élastiques restent inchangées et la variable de base est presque doublée. Enfin, faire élastique = 0 base = 120080183810681886665215049728.
Lorsque la proportion entre les variables élastiques et de base est sérieusement déséquilibrée, l’attaquant (0x87F58580) peut être ajouté avec une petite hypothèque pour emprunter un grand nombre de jetons MIM par les restrictions dans le modificateur de solvant.
3. Suggestion 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 de la logique pertinente de la précision de développement, considérez soigneusement la précision et l’ensemble de la situation.
2. Avant le lancement du projet, une équipe d’audit professionnelle de troisième partie doit effectuer des audits de contrat intelligents.