Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Aperçu de l'événement
Le 2 février 2023, OrionProtocol a subi une attaque par réentrance sur Ethereum et Binance Smart Chain, entraînant une perte d'environ 2,9 millions de dollars. L'attaquant a exploité une vulnérabilité du contrat pour voler 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 de Token personnalisé pour préparer l'attaque suivante.
Effectuer un prêt via la méthode swap de UNI-V2 et appeler la méthode ExchangeWithAtomic.swapThroughOrionPool pour échanger des tokens. Le chemin d'échange contient l'adresse du contrat Token créée par l'attaquant.
Lors de l'exécution de la méthode swapThroughOrionPool, un attaquant exploite la fonction de rappel dans le contrat Token personnalisé pour appeler plusieurs fois la méthode ExchangeWithAtomic.depositAsset, ce qui entraîne une accumulation multiple du montant déposé.
Enfin, l'attaquant réalise des bénéfices en effectuant des opérations de retrait.
Flux de fonds
Les fonds initiaux de l'attaquant proviennent du portefeuille chaud d'une plateforme d'échange. Sur les 1 651 ETH de bénéfices, 657,5 ETH restent dans le portefeuille de l'attaquant, le reste ayant été transféré via un service de mélange.
Analyse des vulnérabilités
Le problème central réside dans la fonction doSwapThroughOrionPool. Cette fonction, lors de l'exécution de _doSwapTokens, effectue d'abord l'opération de transfert, puis met à jour la variable curBalance. L'attaquant exploite la fonction transfer de Token personnalisée en y ajoutant un rappel, ce qui entraîne un nouvel appel à la fonction depositAsset avant la mise à jour de curBalance, entraînant une erreur de calcul de solde.
Conseils de prévention
Lors de la conception du contrat, il est nécessaire de prendre en compte les risques de sécurité potentiels liés à l'utilisation de plusieurs tokens et chemins d'échange.
Suivez le modèle "Vérifications-Effets-Interactions" (Checks-Effects-Interactions) pour écrire le code des contrats, c'est-à-dire d'abord effectuer des vérifications de condition, puis mettre à jour les variables d'état, et enfin procéder aux appels externes.
Ajouter des mécanismes de sécurité tels que des verrous de réentrées pour prévenir les attaques par réentrées.
Effectuer régulièrement des audits de code et des analyses de vulnérabilités, et réparer rapidement les dangers potentiels pour la sécurité.
Limiter le montant maximum d'une transaction unique, mettre en place des restrictions de fréquence de transaction et d'autres mesures pour réduire les pertes potentielles causées par des attaques.
En prenant ces mesures, l'équipe du projet peut considérablement améliorer la sécurité des contrats et réduire le risque de subir des attaques similaires. Une attention continue à la sécurité des contrats intelligents est essentielle pour maintenir le développement sain de l'écosystème Web3.
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.
12 J'aime
Récompense
12
5
Reposter
Partager
Commentaire
0/400
StakeOrRegret
· 07-15 17:28
Encore un piège des smart contracts.
Voir l'originalRépondre0
TokenEconomist
· 07-15 07:15
laisse-moi décomposer cela : vulnérabilité de réentrance classique, essentiellement arbitrage économique mais avec des défauts de contrat intelligent
Voir l'originalRépondre0
FreeRider
· 07-12 19:16
Encore un nouveau contributeur pigeons
Voir l'originalRépondre0
WenMoon42
· 07-12 19:09
Un autre projet est mort.
Voir l'originalRépondre0
LiquidationSurvivor
· 07-12 19:08
Le contrat a encore été exploité, je suis sans voix.
OrionProtocol a subi une attaque de réentrance de 2,9 millions de dollars, affectant à la fois les chaînes ETH et BSC.
Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Aperçu de l'événement
Le 2 février 2023, OrionProtocol a subi une attaque par réentrance sur Ethereum et Binance Smart Chain, entraînant une perte d'environ 2,9 millions de dollars. L'attaquant a exploité une vulnérabilité du contrat pour voler 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 de Token personnalisé pour préparer l'attaque suivante.
Effectuer un prêt via la méthode swap de UNI-V2 et appeler la méthode ExchangeWithAtomic.swapThroughOrionPool pour échanger des tokens. Le chemin d'échange contient l'adresse du contrat Token créée par l'attaquant.
Lors de l'exécution de la méthode swapThroughOrionPool, un attaquant exploite la fonction de rappel dans le contrat Token personnalisé pour appeler plusieurs fois la méthode ExchangeWithAtomic.depositAsset, ce qui entraîne une accumulation multiple du montant déposé.
Enfin, l'attaquant réalise des bénéfices en effectuant des opérations de retrait.
Flux de fonds
Les fonds initiaux de l'attaquant proviennent du portefeuille chaud d'une plateforme d'échange. Sur les 1 651 ETH de bénéfices, 657,5 ETH restent dans le portefeuille de l'attaquant, le reste ayant été transféré via un service de mélange.
Analyse des vulnérabilités
Le problème central réside dans la fonction doSwapThroughOrionPool. Cette fonction, lors de l'exécution de _doSwapTokens, effectue d'abord l'opération de transfert, puis met à jour la variable curBalance. L'attaquant exploite la fonction transfer de Token personnalisée en y ajoutant un rappel, ce qui entraîne un nouvel appel à la fonction depositAsset avant la mise à jour de curBalance, entraînant une erreur de calcul de solde.
Conseils de prévention
Lors de la conception du contrat, il est nécessaire de prendre en compte les risques de sécurité potentiels liés à l'utilisation de plusieurs tokens et chemins d'échange.
Suivez le modèle "Vérifications-Effets-Interactions" (Checks-Effects-Interactions) pour écrire le code des contrats, c'est-à-dire d'abord effectuer des vérifications de condition, puis mettre à jour les variables d'état, et enfin procéder aux appels externes.
Ajouter des mécanismes de sécurité tels que des verrous de réentrées pour prévenir les attaques par réentrées.
Effectuer régulièrement des audits de code et des analyses de vulnérabilités, et réparer rapidement les dangers potentiels pour la sécurité.
Limiter le montant maximum d'une transaction unique, mettre en place des restrictions de fréquence de transaction et d'autres mesures pour réduire les pertes potentielles causées par des attaques.
En prenant ces mesures, l'équipe du projet peut considérablement améliorer la sécurité des contrats et réduire le risque de subir des attaques similaires. Une attention continue à la sécurité des contrats intelligents est essentielle pour maintenir le développement sain de l'écosystème Web3.