Le 7 décembre 2023, selon Beosin EagleEye, le contrat TIME sur Ethereum a été victime d'une attaque de hacker, générant un bénéfice d'environ 188 000 $ pour l'attaquant.

Ce n’était pas une attaque ordinaire.

En retraçant les origines, il a été découvert que le 4 décembre 2023, Thirdweb a publié un avis de vulnérabilité sur son blog et ses chaînes officielles indiquant : « Le 20 novembre 2023, nous avons réalisé qu'il existe une vulnérabilité de sécurité dans l'intégration d'un système ouvert commun. -modèle de bibliothèque source pour les contrats intelligents web3. Cette vulnérabilité affecte certains contrats intelligents prédéfinis de Thirdweb, et nous avons contacté les équipes de projet concernées pour les atténuer.

Le 7 décembre, le contrat TIME sur Ethereum est devenu le premier projet victime de ce problème de sécurité. Aujourd’hui, découvrons la vérité derrière cette attaque.

Aperçu du contexte du protocole

Protocole de sécurité natif des méta-transactions ERC2771 :

Le protocole EIP 2771 définit un protocole au niveau du contrat permettant au destinataire d'accepter des métatransactions via un contrat de relais de confiance. Aucune modification du protocole n’est apportée. Le protocole est conçu pour permettre à Ethereum d'accepter des appels provenant de comptes externes qui ne disposent pas d'ETH pour payer les frais de gaz. Le protocole envoie msg.sender (appelé msgSender()) et msg.data (appelé msgData()) valides au contrat du destinataire en ajoutant des données d'appel supplémentaires. L’intention est de permettre à Ethereum d’accepter les appels provenant de comptes externes sans ETH pour payer les frais de gaz.

En raison de sa conception spécifique, le msg.sender, tel que décrit dans le protocole, est obtenu via la fonction _msgSender(). Cette fonction vérifie si l'initiateur est un relais de confiance et, si tel est le cas, intercepte les 20 derniers octets des données d'appel entrants en tant qu'initiateur de la transaction.

https://eips.ethereum.org/EIPS/eip-2771

Bibliothèque de traitement par lots Muticall :
Muticall est une bibliothèque de fonctionnalités fournie par OpenZeppelin Contracts pour traiter plusieurs appels en un seul appel externe.

À partir de l'événement Time, nous pouvons voir que la fonction Multicall() dans sa base de code parcourt les fonctions DelegateCall pour traiter Calldata et appeler d'autres fonctions dans ce contrat.

https://github.com/OpenZeppelin/openzeppelin-contracts

Informations sur les événements du contrat TIME

● Transaction d'attaque

0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

● Adresse de l'attaquant

0xfde0d1575ed8e06fbf36256bcdfa1f359281455a

● Contrat d'attaque

0x6980a47bee930a4584b09ee79ebe46484fbdbdd0

● Contrat attaqué

0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29

Analyse de la vulnérabilité des événements de contrat TIME

Cette attaque exploitait principalement un contrat Forwarder qui appelait la fonction multicall du jeton TIME. En raison de l'utilisation du protocole de sécurité de méta-transaction natif ERC2771 par le jeton TIME, l'attaquant a malicieusement falsifié _msg.sender, entraînant la destruction des jetons de la paire. En fin de compte, l’attaquant a profité de l’augmentation du prix du jeton grâce aux échanges.

Flux d'attaque d'événement de contrat TIME

1. L'attaquant a initialement utilisé 5 WTH pour échanger environ 3,45 milliards de jetons Time comme fonds préparatoires.

2. Par la suite, l’attaquant a appelé la fonction d’exécution du Forwarder via une vérification de signature, transmettant des données d’appel malveillantes comme suit :

3. À ce stade, la fonction d'exécution appellerait l'adresse req.to (adresse du jeton de temps), packagerait les adresses req.data et req.from et appellerait la fonction multicall du jeton de temps. Comment le pirate informatique a-t-il supprimé req.from ? Le pirate informatique a défini la longueur (taille) de data[1] sur 0x38, ce qui a provoqué la troncature de multicall req.from lors de l'analyse des données.

4. La fonction multicall appelée fonction de gravure, détruisant les jetons Time dans la paire en tant qu'appelant.

5. Enfin, l'attaquant a appelé la fonction de synchronisation dans la paire pour synchroniser les réserves, provoquant une hausse du prix des jetons Time.

Au final, le hacker a échangé les tokens TIME obtenus lors de la phase de préparation contre de l'ETH dans la paire, générant un bénéfice de 188 000 $. Cet événement d’attaque nous rappelle une fois de plus l’importance cruciale de la sécurité des contrats intelligents. Les équipes de projet doivent renforcer les efforts d’identification et de remédiation des vulnérabilités pour assurer le développement durable de l’écosystème blockchain et la sécurité des utilisateurs.

Contact

Si vous avez besoin de services de sécurité blockchain, n'hésitez pas à nous contacter :

Site officiel Beosin EagleEye Twitter Telegram Linkedin