OrionProtocol a subi une attaque par réentrance entraînant une perte de 2,9 millions de dollars. Analyse des vulnérabilités de sécurité et recommandations de prévention.
Analyse de l'incident d'attaque par réentrance d'OrionProtocol
Le 2 février 2023 après-midi, Orion Protocol sur Ethereum et Binance a subi une attaque par réentrance en raison d'une vulnérabilité de contrat, entraînant une perte d'environ 2,9 millions de dollars, dont 2 844 766 USDT sur Ethereum et 191 606 BUSD sur BSC.
Analyse du processus d'attaque
L'attaquant a d'abord créé un contrat de Token, puis a effectué des opérations de transfert et d'autorisation pour préparer l'attaque ultérieure. Ensuite, l'attaquant a emprunté en utilisant 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, le Token créé par l'attaquant, USDT].
Dans le processus d'échange, en raison de la fonction de rappel existant dans le contrat Token créé par l'attaquant, l'attaquant a pu rappeler la méthode ExchangeWithAtomic.depositAsset via Token.Transfer, réalisant ainsi une attaque par réentrées. Cela a conduit à une accumulation continue du montant déposé, et finalement, l'attaquant a réalisé un profit par le biais d'opérations de retrait.
Flux de capitaux
Les fonds initiaux de l'attaquant proviennent du compte de portefeuille chaud d'une plateforme de trading. Parmi les 1651 ETH de bénéfice, 657,5 ETH sont toujours dans l'adresse de 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 de la vulnérabilité se situe dans la fonction doSwapThroughOrionPool. Cette fonction met à jour la variable curBalance après l'exécution du transfert de jetons, ce qui crée une opportunité pour l'attaquant. L'attaquant a ajouté une fonction de rappel dans la fonction transfer de faux jetons, appelant la fonction depositAsset, ce qui entraîne une mise à jour incorrecte de curBalance. En fin de compte, après avoir remboursé le prêt éclair, l'attaquant a retiré des fonds excessifs via la fonction withdraw.
Reproduction de l'attaque
Les chercheurs ont fourni une partie du code POC, simulant le processus d'attaque. Les résultats des tests montrent que l'attaquant a réussi à exploiter la vulnérabilité du contrat pour obtenir des USDT supplémentaires.
Conseils de sécurité
Pour les projets ayant une fonction d'échange de tokens, il est nécessaire de prendre en compte les risques de sécurité potentiels liés à la diversité des tokens et des chemins d'échange. Il est recommandé de suivre la norme de codage "d'abord évaluer, puis écrire dans les variables, puis effectuer les appels externes" (modèle Checks-Effects-Interactions), afin d'améliorer la sécurité et la stabilité des contrats. De plus, les équipes de projet devraient, autant que possible, éliminer les risques des contrats hors chaîne, afin d'assurer le bon fonctionnement sécurisé 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.
21 J'aime
Récompense
21
3
Partager
Commentaire
0/400
VirtualRichDream
· 07-15 08:57
Eh, qui va vérifier si c'est un traître qui a fait ça.
Voir l'originalRépondre0
HallucinationGrower
· 07-12 12:30
Qu'est-ce que vous avez fait sans le travail de sécurité?
Voir l'originalRépondre0
degenonymous
· 07-12 12:23
Les contrats ont généralement de nombreuses failles.
OrionProtocol a subi une attaque par réentrance entraînant une perte de 2,9 millions de dollars. Analyse des vulnérabilités de sécurité et recommandations de prévention.
Analyse de l'incident d'attaque par réentrance d'OrionProtocol
Le 2 février 2023 après-midi, Orion Protocol sur Ethereum et Binance a subi une attaque par réentrance en raison d'une vulnérabilité de contrat, entraînant une perte d'environ 2,9 millions de dollars, dont 2 844 766 USDT sur Ethereum et 191 606 BUSD sur BSC.
Analyse du processus d'attaque
L'attaquant a d'abord créé un contrat de Token, puis a effectué des opérations de transfert et d'autorisation pour préparer l'attaque ultérieure. Ensuite, l'attaquant a emprunté en utilisant 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, le Token créé par l'attaquant, USDT].
Dans le processus d'échange, en raison de la fonction de rappel existant dans le contrat Token créé par l'attaquant, l'attaquant a pu rappeler la méthode ExchangeWithAtomic.depositAsset via Token.Transfer, réalisant ainsi une attaque par réentrées. Cela a conduit à une accumulation continue du montant déposé, et finalement, l'attaquant a réalisé un profit par le biais d'opérations de retrait.
Flux de capitaux
Les fonds initiaux de l'attaquant proviennent du compte de portefeuille chaud d'une plateforme de trading. Parmi les 1651 ETH de bénéfice, 657,5 ETH sont toujours dans l'adresse de 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 de la vulnérabilité se situe dans la fonction doSwapThroughOrionPool. Cette fonction met à jour la variable curBalance après l'exécution du transfert de jetons, ce qui crée une opportunité pour l'attaquant. L'attaquant a ajouté une fonction de rappel dans la fonction transfer de faux jetons, appelant la fonction depositAsset, ce qui entraîne une mise à jour incorrecte de curBalance. En fin de compte, après avoir remboursé le prêt éclair, l'attaquant a retiré des fonds excessifs via la fonction withdraw.
Reproduction de l'attaque
Les chercheurs ont fourni une partie du code POC, simulant le processus d'attaque. Les résultats des tests montrent que l'attaquant a réussi à exploiter la vulnérabilité du contrat pour obtenir des USDT supplémentaires.
Conseils de sécurité
Pour les projets ayant une fonction d'échange de tokens, il est nécessaire de prendre en compte les risques de sécurité potentiels liés à la diversité des tokens et des chemins d'échange. Il est recommandé de suivre la norme de codage "d'abord évaluer, puis écrire dans les variables, puis effectuer les appels externes" (modèle Checks-Effects-Interactions), afin d'améliorer la sécurité et la stabilité des contrats. De plus, les équipes de projet devraient, autant que possible, éliminer les risques des contrats hors chaîne, afin d'assurer le bon fonctionnement sécurisé de l'écosystème Web3.