Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Le 2 février 2023, OrionProtocol a subi une attaque par réentrance sur Ethereum et la Binance Smart Chain, entraînant une perte d'environ 2,9 millions de dollars. Les attaquants ont exploité une vulnérabilité du contrat pour voler 2 844 766 USDT sur la chaîne Ethereum et 191 606 BUSD sur la Binance Smart Chain.
Processus d'attaque
L'attaquant a d'abord créé un contrat de token personnalisé et a effectué les opérations de transfert et d'autorisation correspondantes. Ensuite, l'attaquant a emprunté via la méthode swap d'un certain DEX et a appelé la méthode ExchangeWithAtomic.swapThroughOrionPool pour échanger des tokens. Le chemin d'échange comprend l'adresse du contrat de token créé par l'attaquant.
Lors du processus d'échange, en raison de la présence d'un mécanisme de rappel dans le contrat Token de l'attaquant, l'attaquant a pu rappeler la méthode ExchangeWithAtomic.depositAsset via Token.Transfer, permettant ainsi une attaque par réentrance. Cela a entraîné une accumulation répétée du montant déposé, et finalement, l'attaquant a réalisé un profit en effectuant une opération de retrait.
Flux de fonds
Les fonds initiaux de l'attaquant proviennent du compte de portefeuille chaud d'une plateforme d'échange. Parmi les 1 651 ETH réalisés, 657,5 ETH restent dans l'adresse du portefeuille de l'attaquant, tandis que le reste a été transféré via un service de mélange.
Analyse des vulnérabilités
Le problème central de la vulnérabilité se situe dans la fonction doSwapThroughOrionPool. Cette fonction appelle la fonction _doSwapTokens, qui met à jour la variable curBalance après l'opération de transfert. L'attaquant a exploité la fonction de rappel ajoutée dans la fonction transfer du Token personnalisé, appelant à nouveau la fonction depositAsset avant la mise à jour de curBalance, ce qui a conduit à une mise à jour incorrecte de curBalance. Finalement, après avoir remboursé le prêt éclair, l'attaquant a pu retirer des fonds supplémentaires via la fonction withdraw.
Conseils de prévention
Pour prévenir des attaques similaires, il est conseillé aux équipes de projet de prêter attention aux points suivants lors de la conception des contrats :
Prenez en compte les situations imprévues qui peuvent découler de divers tokens et de multiples chemins d'échange.
Suivre le modèle de codage "Vérifications-Effects-Interactions" (Checks-Effects-Interactions), c'est-à-dire d'abord effectuer les vérifications de conditions, puis mettre à jour les variables d'état, et enfin exécuter les appels externes.
Utilisez des verrous de réentrance avant et après les opérations critiques pour prévenir les attaques par réentrance.
Vérifier la sécurité des contrats Token appelés par des tiers.
Effectuer régulièrement des audits de code et des tests de sécurité pour détecter et corriger rapidement les vulnérabilités potentielles.
En prenant ces mesures, le projet peut considérablement améliorer la sécurité et la stabilité des contrats, tout en minimisant le risque d'attaques.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
17 J'aime
Récompense
17
7
Partager
Commentaire
0/400
AirdropHunterXiao
· Il y a 10h
Le projet Blockchain a encore été exploité.
Voir l'originalRépondre0
MemecoinResearcher
· Il y a 10h
ngmi... semble que la malédiction de la réentrance frappe encore fr fr
Voir l'originalRépondre0
NightAirdropper
· Il y a 10h
C'est vraiment triste d'être harcelé tous les jours.
L'OrionProtocol a subi une attaque par réinjection de 2,9 millions de dollars. Analyse du processus d'attaque et recommandations de prévention.
Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Le 2 février 2023, OrionProtocol a subi une attaque par réentrance sur Ethereum et la Binance Smart Chain, entraînant une perte d'environ 2,9 millions de dollars. Les attaquants ont exploité une vulnérabilité du contrat pour voler 2 844 766 USDT sur la chaîne Ethereum et 191 606 BUSD sur la Binance Smart Chain.
Processus d'attaque
L'attaquant a d'abord créé un contrat de token personnalisé et a effectué les opérations de transfert et d'autorisation correspondantes. Ensuite, l'attaquant a emprunté via la méthode swap d'un certain DEX et a appelé la méthode ExchangeWithAtomic.swapThroughOrionPool pour échanger des tokens. Le chemin d'échange comprend l'adresse du contrat de token créé par l'attaquant.
Lors du processus d'échange, en raison de la présence d'un mécanisme de rappel dans le contrat Token de l'attaquant, l'attaquant a pu rappeler la méthode ExchangeWithAtomic.depositAsset via Token.Transfer, permettant ainsi une attaque par réentrance. Cela a entraîné une accumulation répétée du montant déposé, et finalement, l'attaquant a réalisé un profit en effectuant une opération de retrait.
Flux de fonds
Les fonds initiaux de l'attaquant proviennent du compte de portefeuille chaud d'une plateforme d'échange. Parmi les 1 651 ETH réalisés, 657,5 ETH restent dans l'adresse du portefeuille de l'attaquant, tandis que le reste a été transféré via un service de mélange.
Analyse des vulnérabilités
Le problème central de la vulnérabilité se situe dans la fonction doSwapThroughOrionPool. Cette fonction appelle la fonction _doSwapTokens, qui met à jour la variable curBalance après l'opération de transfert. L'attaquant a exploité la fonction de rappel ajoutée dans la fonction transfer du Token personnalisé, appelant à nouveau la fonction depositAsset avant la mise à jour de curBalance, ce qui a conduit à une mise à jour incorrecte de curBalance. Finalement, après avoir remboursé le prêt éclair, l'attaquant a pu retirer des fonds supplémentaires via la fonction withdraw.
Conseils de prévention
Pour prévenir des attaques similaires, il est conseillé aux équipes de projet de prêter attention aux points suivants lors de la conception des contrats :
En prenant ces mesures, le projet peut considérablement améliorer la sécurité et la stabilité des contrats, tout en minimisant le risque d'attaques.