La vulnérabilité du contrat OrionProtocol entraîne une perte de 2,9 millions de dollars
Le 2 février 2023, les contrats Orion Protocol sur Ethereum et Binance Smart Chain ont subi une attaque par réentrance, entraînant une perte d'environ 2,9 millions de dollars. Les pertes spécifiques comprennent 2 844 766 USDT sur la chaîne Ethereum et 191 606 BUSD sur la chaîne Binance Smart.
Analyse du processus d'attaque
L'attaquant a d'abord déployé un contrat Token sur mesure et a effectué des opérations de transfert et d'autorisation connexes. Ensuite, l'attaquant a emprunté des fonds via la méthode swap d'un certain DEX et a appelé la méthode swapThroughOrionPool d'OrionProtocol pour échanger des tokens. Le chemin d'échange comprend l'adresse du contrat Token créé par l'attaquant.
Lors de l'exécution de la méthode swapThroughOrionPool, en raison de la fonction de rappel dans le contrat Token de l'attaquant, il est possible d'appeler plusieurs fois la méthode depositAsset pendant le processus de transfert. Cela entraîne un double calcul du montant du dépôt, permettant finalement à l'attaquant d'obtenir des gains excessifs par le biais d'opérations de retrait.
Flux de fonds
Les fonds initiaux de l'attaquant proviennent d'un portefeuille chaud d'une certaine plateforme d'échange. Sur les 1 651 ETH de bénéfices de l'attaque, 657,5 ETH sont toujours dans l'adresse du portefeuille de l'attaquant, le reste ayant été transféré via un service de mixage.
Noyau de la vulnérabilité
Le problème réside dans la fonction doSwapThroughOrionPool. Cette fonction effectue d'abord l'opération de transfert lors de l'exécution de _doSwapTokens, puis met à jour la variable curBalance. L'attaquant exploite le rappel de la méthode depositAsset via la fonction transfer de son Token personnalisé, ce qui entraîne une mise à jour incorrecte de curBalance. Cela permet à l'attaquant, après avoir remboursé le prêt flash, d'extraire des fonds excédentaires via la fonction withdraw.
Conseils de sécurité
Pour les contrats intelligents ayant une fonction d'échange de jetons, les développeurs doivent prendre en compte les points suivants :
Prendre en compte les imprévus que peuvent entraîner divers Token et chemins d'échange.
Suivre le modèle de codage "Vérifications-Effets-Interactions" (Checks-Effects-Interactions), c'est-à-dire d'abord effectuer une vérification de l'état, puis mettre à jour l'état du contrat, et enfin interagir avec des contrats externes.
Mettre à jour les variables d'état clés avant d'effectuer des appels externes.
Mettre en œuvre des mécanismes de sécurité tels que le verrouillage de réentrées.
Effectuer un audit de sécurité complet du contrat.
En prenant ces mesures, il est possible de réduire considérablement le risque d'attaque des contrats intelligents et d'améliorer la sécurité et la stabilité du projet.
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.
OrionProtocol a subi une attaque par réentrance, 2,9 millions de dollars ont été volés.
La vulnérabilité du contrat OrionProtocol entraîne une perte de 2,9 millions de dollars
Le 2 février 2023, les contrats Orion Protocol sur Ethereum et Binance Smart Chain ont subi une attaque par réentrance, entraînant une perte d'environ 2,9 millions de dollars. Les pertes spécifiques comprennent 2 844 766 USDT sur la chaîne Ethereum et 191 606 BUSD sur la chaîne Binance Smart.
Analyse du processus d'attaque
L'attaquant a d'abord déployé un contrat Token sur mesure et a effectué des opérations de transfert et d'autorisation connexes. Ensuite, l'attaquant a emprunté des fonds via la méthode swap d'un certain DEX et a appelé la méthode swapThroughOrionPool d'OrionProtocol pour échanger des tokens. Le chemin d'échange comprend l'adresse du contrat Token créé par l'attaquant.
Lors de l'exécution de la méthode swapThroughOrionPool, en raison de la fonction de rappel dans le contrat Token de l'attaquant, il est possible d'appeler plusieurs fois la méthode depositAsset pendant le processus de transfert. Cela entraîne un double calcul du montant du dépôt, permettant finalement à l'attaquant d'obtenir des gains excessifs par le biais d'opérations de retrait.
Flux de fonds
Les fonds initiaux de l'attaquant proviennent d'un portefeuille chaud d'une certaine plateforme d'échange. Sur les 1 651 ETH de bénéfices de l'attaque, 657,5 ETH sont toujours dans l'adresse du portefeuille de l'attaquant, le reste ayant été transféré via un service de mixage.
Noyau de la vulnérabilité
Le problème réside dans la fonction doSwapThroughOrionPool. Cette fonction effectue d'abord l'opération de transfert lors de l'exécution de _doSwapTokens, puis met à jour la variable curBalance. L'attaquant exploite le rappel de la méthode depositAsset via la fonction transfer de son Token personnalisé, ce qui entraîne une mise à jour incorrecte de curBalance. Cela permet à l'attaquant, après avoir remboursé le prêt flash, d'extraire des fonds excédentaires via la fonction withdraw.
Conseils de sécurité
Pour les contrats intelligents ayant une fonction d'échange de jetons, les développeurs doivent prendre en compte les points suivants :
En prenant ces mesures, il est possible de réduire considérablement le risque d'attaque des contrats intelligents et d'améliorer la sécurité et la stabilité du projet.