Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Le 2 février 2023 après-midi, les contrats OrionProtocol sur Ethereum et Binance Chain ont subi une attaque par réentrance en raison d'une vulnérabilité. Les attaquants ont réussi à voler environ 2,9 millions de dollars de fonds, 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 spécial, puis a effectué des opérations de transfert et d'autorisation 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 sur [USDC, Token créé par l'attaquant, USDT]. Pendant le processus d'échange, en raison de la fonction de rappel incluse dans le contrat de Token créé par l'attaquant, une attaque par réentrance a été déclenchée lors de l'exécution de la méthode ExchangeWithAtomic.swapThroughOrionPool. L'attaquant a continué à rappeler la méthode ExchangeWithAtomic.depositAsset via Token.Transfer, ce qui a entraîné une accumulation continue du montant du dépôt, et a finalement réalisé un profit grâce à l'opération de retrait.
Flux de capital
Les fonds initiaux de l'attaquant proviennent du compte du portefeuille chaud d'une certaine plateforme d'échange. Parmi les 1 651 ETH profitant de l'attaque, 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 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 fonctionnalité de rappel dans la fonction transfer du contrat Token qu'il a créé, ce rappel appelle à nouveau la fonction depositAsset. Cela entraîne une mise à jour incorrecte de la variable curBalance, permettant à l'attaquant de retirer des fonds supplémentaires via la fonction withdraw après avoir remboursé le prêt flash.
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 faille du contrat pour obtenir des USDT supplémentaires.
Conseils de sécurité
Pour ce type d'attaque, il est conseillé aux parties prenantes de prendre en compte les points suivants lors de la conception des contrats :
Évaluer en profondeur les risques de sécurité potentiels liés à divers Token et chemins d'échange.
Suivre la norme de codage "d'abord juger, puis écrire dans la variable, puis effectuer l'appel externe" (modèle Checks-Effects-Interactions).
Lors de la mise en œuvre de la fonction d'échange de jetons, faites particulièrement attention à prévenir les attaques par réentrance.
Effectuer des audits de code réguliers pour détecter et corriger rapidement les vulnérabilités potentielles.
Envisagez de mettre en œuvre des limites de montant de transaction ou d'autres mesures de contrôle des risques.
Cet événement souligne à nouveau l'importance de la sécurité des contrats intelligents. Les équipes de projet doivent continuer à se concentrer sur la sécurité des contrats et prendre des mesures actives pour protéger les actifs des utilisateurs, afin de maintenir le développement sain de l'ensemble 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.
16 J'aime
Récompense
16
6
Partager
Commentaire
0/400
SybilSlayer
· 07-28 15:34
Encore une réinsertion, vraiment ennuyeux.
Voir l'originalRépondre0
CantAffordPancake
· 07-28 11:05
Encore une faille de contrat, j'en peux plus.
Voir l'originalRépondre0
GateUser-26d7f434
· 07-25 18:03
Rug Pull ~
Voir l'originalRépondre0
OvertimeSquid
· 07-25 17:55
Encore un contrat qui se fait couper les coupons, c'est lassant.
Voir l'originalRépondre0
BrokenYield
· 07-25 17:55
un autre jour, un autre hack defi... les vulnérabilités des protocoles ne dorment jamais
OrionProtocol a subi une attaque par réentrance, près de 3 millions de dollars de fonds ont été volés.
Analyse de l'incident d'attaque par réinjection d'OrionProtocol
Le 2 février 2023 après-midi, les contrats OrionProtocol sur Ethereum et Binance Chain ont subi une attaque par réentrance en raison d'une vulnérabilité. Les attaquants ont réussi à voler environ 2,9 millions de dollars de fonds, 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 spécial, puis a effectué des opérations de transfert et d'autorisation 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 sur [USDC, Token créé par l'attaquant, USDT]. Pendant le processus d'échange, en raison de la fonction de rappel incluse dans le contrat de Token créé par l'attaquant, une attaque par réentrance a été déclenchée lors de l'exécution de la méthode ExchangeWithAtomic.swapThroughOrionPool. L'attaquant a continué à rappeler la méthode ExchangeWithAtomic.depositAsset via Token.Transfer, ce qui a entraîné une accumulation continue du montant du dépôt, et a finalement réalisé un profit grâce à l'opération de retrait.
Flux de capital
Les fonds initiaux de l'attaquant proviennent du compte du portefeuille chaud d'une certaine plateforme d'échange. Parmi les 1 651 ETH profitant de l'attaque, 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 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 fonctionnalité de rappel dans la fonction transfer du contrat Token qu'il a créé, ce rappel appelle à nouveau la fonction depositAsset. Cela entraîne une mise à jour incorrecte de la variable curBalance, permettant à l'attaquant de retirer des fonds supplémentaires via la fonction withdraw après avoir remboursé le prêt flash.
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 faille du contrat pour obtenir des USDT supplémentaires.
Conseils de sécurité
Pour ce type d'attaque, il est conseillé aux parties prenantes de prendre en compte les points suivants lors de la conception des contrats :
Cet événement souligne à nouveau l'importance de la sécurité des contrats intelligents. Les équipes de projet doivent continuer à se concentrer sur la sécurité des contrats et prendre des mesures actives pour protéger les actifs des utilisateurs, afin de maintenir le développement sain de l'ensemble de l'écosystème Web3.