Analyse de l'incident d'attaque par réentrance d'OrionProtocol
Le 2 février 2023 à 15:40:20 UTC, OrionProtocol sur Ethereum et Binance Smart Chain a subi une attaque par réentrance en raison d'une vulnérabilité de contrat. L'attaquant a réalisé un profit de 2 844 766 USDT sur la chaîne Ethereum et de 191 606 BUSD sur la chaîne Binance Smart, pour une perte totale d'environ 2,9 millions de dollars.
Analyse du processus d'attaque
L'attaquant a d'abord déployé un contrat de Token personnalisé et effectué les préparatifs nécessaires. Ensuite, l'attaquant a emprunté des fonds via la fonction swap d'un certain DEX, en appelant la méthode ExchangeWithAtomic.swapThroughOrionPool d'OrionProtocol pour échanger des tokens. Le chemin d'échange inclut l'adresse du contrat Token créé par l'attaquant.
Lors du processus d'échange, un attaquant utilise la fonctionnalité de rappel du contrat Token personnalisé pour appeler de manière répétée la méthode ExchangeWithAtomic.depositAsset, ce qui entraîne une accumulation continue du montant déposé. En fin de compte, l'attaquant réalise un profit grâce à l'opération de retrait.
Flux de capitaux
Les fonds initiaux de l'attaquant proviennent du portefeuille chaud d'une plateforme d'échange. Parmi les 1 651 ETH de profits de l'attaque, 657,5 ETH restent dans l'adresse du portefeuille de l'attaquant, le reste ayant été transféré via un service de mélange.
Analyse des vulnérabilités
Le problème principal réside dans les fonctions doSwapThroughOrionPool et _doSwapTokens du contrat ExchangeWithAtomic. Ces fonctions mettent à jour la variable curBalance après l'exécution du transfert de tokens, violant le modèle "Checks-Effects-Interactions"(Checks-Effects-Interactions). Un attaquant peut provoquer une mise à jour incorrecte de curBalance en ajoutant une logique de rappel dans la fonction transfer de Token personnalisé, permettant ainsi une attaque par réentrance.
Reproduction de l'attaque
Les chercheurs ont fourni une partie du code POC, démontrant comment exploiter cette vulnérabilité pour mener des attaques. Les résultats des tests montrent que les attaquants ont réussi à obtenir des USDT supplémentaires.
Conseils de sécurité
Lors de la mise en œuvre de la fonction d'échange de jetons, l'équipe du projet doit prendre en compte les risques de sécurité potentiels liés aux différents types de jetons et aux chemins d'échange.
Respectez strictement la norme de codage "vérification-activation-interaction", en veillant à ce que la mise à jour des variables d'état soit effectuée avant l'appel externe.
Mettre en œuvre 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 tests de sécurité pour détecter et corriger rapidement les vulnérabilités potentielles.
Envisager d'introduire un mécanisme de limite pour contrôler le montant maximum d'une seule transaction et réduire les pertes potentielles.
Cet événement nous rappelle une fois de plus qu'il est essentiel de rester vigilant lors du développement de contrats intelligents et d'accorder une importance particulière à la sécurité. Ce n'est qu'en améliorant continuellement les mesures de sécurité que nous pourrons garantir 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.
OrionProtocol a subi une attaque par réentrance, entraînant une perte de 2,9 millions de dollars.
Analyse de l'incident d'attaque par réentrance d'OrionProtocol
Le 2 février 2023 à 15:40:20 UTC, OrionProtocol sur Ethereum et Binance Smart Chain a subi une attaque par réentrance en raison d'une vulnérabilité de contrat. L'attaquant a réalisé un profit de 2 844 766 USDT sur la chaîne Ethereum et de 191 606 BUSD sur la chaîne Binance Smart, pour une perte totale d'environ 2,9 millions de dollars.
Analyse du processus d'attaque
L'attaquant a d'abord déployé un contrat de Token personnalisé et effectué les préparatifs nécessaires. Ensuite, l'attaquant a emprunté des fonds via la fonction swap d'un certain DEX, en appelant la méthode ExchangeWithAtomic.swapThroughOrionPool d'OrionProtocol pour échanger des tokens. Le chemin d'échange inclut l'adresse du contrat Token créé par l'attaquant.
Lors du processus d'échange, un attaquant utilise la fonctionnalité de rappel du contrat Token personnalisé pour appeler de manière répétée la méthode ExchangeWithAtomic.depositAsset, ce qui entraîne une accumulation continue du montant déposé. En fin de compte, l'attaquant réalise un profit grâce à l'opération de retrait.
Flux de capitaux
Les fonds initiaux de l'attaquant proviennent du portefeuille chaud d'une plateforme d'échange. Parmi les 1 651 ETH de profits de l'attaque, 657,5 ETH restent dans l'adresse du portefeuille de l'attaquant, le reste ayant été transféré via un service de mélange.
Analyse des vulnérabilités
Le problème principal réside dans les fonctions doSwapThroughOrionPool et _doSwapTokens du contrat ExchangeWithAtomic. Ces fonctions mettent à jour la variable curBalance après l'exécution du transfert de tokens, violant le modèle "Checks-Effects-Interactions"(Checks-Effects-Interactions). Un attaquant peut provoquer une mise à jour incorrecte de curBalance en ajoutant une logique de rappel dans la fonction transfer de Token personnalisé, permettant ainsi une attaque par réentrance.
Reproduction de l'attaque
Les chercheurs ont fourni une partie du code POC, démontrant comment exploiter cette vulnérabilité pour mener des attaques. Les résultats des tests montrent que les attaquants ont réussi à obtenir des USDT supplémentaires.
Conseils de sécurité
Lors de la mise en œuvre de la fonction d'échange de jetons, l'équipe du projet doit prendre en compte les risques de sécurité potentiels liés aux différents types de jetons et aux chemins d'échange.
Respectez strictement la norme de codage "vérification-activation-interaction", en veillant à ce que la mise à jour des variables d'état soit effectuée avant l'appel externe.
Mettre en œuvre 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 tests de sécurité pour détecter et corriger rapidement les vulnérabilités potentielles.
Envisager d'introduire un mécanisme de limite pour contrôler le montant maximum d'une seule transaction et réduire les pertes potentielles.
Cet événement nous rappelle une fois de plus qu'il est essentiel de rester vigilant lors du développement de contrats intelligents et d'accorder une importance particulière à la sécurité. Ce n'est qu'en améliorant continuellement les mesures de sécurité que nous pourrons garantir le développement sain de l'écosystème Web3.