Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Le 2 février 2023 à 15h40, Orion Protocol sur Ethereum et Binance Smart Chain a subi une attaque par réentrance en raison d'une vulnérabilité de contrat, entraînant une perte totale d'environ 2,9 millions de dollars, dont 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é et a effectué des opérations de transfert et d'autorisation connexes pour préparer l'attaque suivante. Ensuite, l'attaquant a emprunté via la méthode swap de UNI-V2 et a appelé la méthode swapThroughOrionPool du contrat ExchangeWithAtomic pour échanger des tokens. Le chemin d'échange est défini comme [USDC, Token de l'attaquant, USDT].
Au cours du processus d'échange, en raison de la fonctionnalité de rappel incluse dans le contrat Token de l'attaquant, cela a entraîné un nouvel appel à la méthode ExchangeWithAtomic.depositAsset pendant le processus Token.Transfer, ce qui a permis une attaque par réentrance. Cela a entraîné l'augmentation du montant du dépôt, et finalement, l'attaquant a réalisé un profit grâce à l'opération de retrait.
Flux de trésorerie
Les fonds initiaux de l'attaquant proviennent d'un compte de portefeuille chaud d'une grande plateforme d'échange. Parmi les 1 651 ETH obtenus par l'attaque, 657,5 sont toujours dans le portefeuille de l'attaquant, le reste ayant été transféré par le biais d'un service de mélange.
Analyse des vulnérabilités
Le cœur de la vulnérabilité réside dans la fonction doSwapThroughOrionPool du contrat ExchangeWithAtomic et dans sa fonction appelée _doSwapTokens. Ces fonctions mettent à jour la variable curBalance uniquement après l'exécution du transfert de Token, offrant ainsi aux attaquants une opportunité d'exploiter une attaque par réentrance.
L'attaquant a ajouté une logique de rappel dans la fonction transfer du Token personnalisé, ce qui a entraîné un nouvel appel à la fonction depositAsset au cours du processus de transfert. Cela a conduit à une mise à jour incorrecte de la variable curBalance, permettant à l'attaquant de retirer des fonds excédentaires via la fonction withdraw après avoir remboursé le prêt flash.
Conseils de sécurité
Pour les projets ayant une fonctionnalité d'échange de jetons, il est nécessaire de prendre en compte les points suivants :
Considérer les risques de sécurité potentiels liés à plusieurs tokens et chemins d'échange.
Suivre le modèle de codage "Vérifications-Effects-Interactions" (Checks-Effects-Interactions), c'est-à-dire effectuer d'abord une vérification de l'état, puis mettre à jour l'état du contrat, et enfin interagir avec des contrats externes.
Utilisez un verrou de réentrance ou un mécanisme similaire pour prévenir les attaques par réentrance lors de l'exécution d'opérations critiques.
Effectuer une vérification et un traitement stricts des valeurs de retour des appels externes.
Effectuer régulièrement des audits de code et des tests de sécurité, et corriger rapidement les vulnérabilités identifiées.
En prenant ces mesures, le projet peut considérablement réduire le risque de subir des attaques similaires et améliorer la sécurité et la stabilité du contrat.
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.
15 J'aime
Récompense
15
4
Partager
Commentaire
0/400
CryptoSurvivor
· 07-09 04:25
À peu près, encore une autre tumeur maligne.
Voir l'originalRépondre0
GateUser-5854de8b
· 07-06 19:22
唉 又被 Couper les coupons了
Voir l'originalRépondre0
SurvivorshipBias
· 07-06 19:21
C'est encore une vulnérabilité de contrat...
Voir l'originalRépondre0
CoconutWaterBoy
· 07-06 19:08
Si vous ne faites pas d'audit de code, vous méritez de perdre de l'argent.
OrionProtocol a subi une attaque par réentrance, entraînant une perte de près de 2,9 millions de dollars.
Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Le 2 février 2023 à 15h40, Orion Protocol sur Ethereum et Binance Smart Chain a subi une attaque par réentrance en raison d'une vulnérabilité de contrat, entraînant une perte totale d'environ 2,9 millions de dollars, dont 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é et a effectué des opérations de transfert et d'autorisation connexes pour préparer l'attaque suivante. Ensuite, l'attaquant a emprunté via la méthode swap de UNI-V2 et a appelé la méthode swapThroughOrionPool du contrat ExchangeWithAtomic pour échanger des tokens. Le chemin d'échange est défini comme [USDC, Token de l'attaquant, USDT].
Au cours du processus d'échange, en raison de la fonctionnalité de rappel incluse dans le contrat Token de l'attaquant, cela a entraîné un nouvel appel à la méthode ExchangeWithAtomic.depositAsset pendant le processus Token.Transfer, ce qui a permis une attaque par réentrance. Cela a entraîné l'augmentation du montant du dépôt, et finalement, l'attaquant a réalisé un profit grâce à l'opération de retrait.
Flux de trésorerie
Les fonds initiaux de l'attaquant proviennent d'un compte de portefeuille chaud d'une grande plateforme d'échange. Parmi les 1 651 ETH obtenus par l'attaque, 657,5 sont toujours dans le portefeuille de l'attaquant, le reste ayant été transféré par le biais d'un service de mélange.
Analyse des vulnérabilités
Le cœur de la vulnérabilité réside dans la fonction doSwapThroughOrionPool du contrat ExchangeWithAtomic et dans sa fonction appelée _doSwapTokens. Ces fonctions mettent à jour la variable curBalance uniquement après l'exécution du transfert de Token, offrant ainsi aux attaquants une opportunité d'exploiter une attaque par réentrance.
L'attaquant a ajouté une logique de rappel dans la fonction transfer du Token personnalisé, ce qui a entraîné un nouvel appel à la fonction depositAsset au cours du processus de transfert. Cela a conduit à une mise à jour incorrecte de la variable curBalance, permettant à l'attaquant de retirer des fonds excédentaires via la fonction withdraw après avoir remboursé le prêt flash.
Conseils de sécurité
Pour les projets ayant une fonctionnalité d'échange de jetons, il est nécessaire de prendre en compte les points suivants :
En prenant ces mesures, le projet peut considérablement réduire le risque de subir des attaques similaires et améliorer la sécurité et la stabilité du contrat.