Titres Titres
Un des pires hacks contre la blockchain Solana s’est produit mercredi lorsqu’un pirate informatique a réussi à transférer 80 000 ether (ETH), soit plus de 214 millions de dollars au moment de la rédaction, hors du système Solana et dans la blockchain Ethereum via le pont Wormhole – un service offrant la possibilité de transférer fonds entre les différentes blockchains.
Expliqué dans un tweet fil par le profil Twitter pseudonyme contrats intelligents, le pirate a finalisé l’exploit en transférant les 80 000 ETH du contrat intelligent Wormhole sur Ethereum en un seul transaction. Il s’est avéré que ce n’était que le dernier mouvement d’une série de piratages qui ont permis au pirate de voler les fonds.
« Bien qu’elle soit spectaculaire, cette transaction n’est que la toute fin d’une intéressante série d’événements. J’ai dû commencer à revenir en arrière pour comprendre comment cela était même possible », tweete smartcontracts.
Les tuteurs ont signé un faux transfert
Wormhole est un soi-disant pont, un contrat intelligent, sur Ethereum dans ce cas, qui fournit un moyen de déplacer des actifs cryptographiques entre différentes blockchains. Selon les contrats intelligents, d’un point de vue de haut niveau, Wormhole dispose spécifiquement d’un ensemble de soi-disant tuteurs qui approuvent les transferts entre les blockchains.
Les gardiens de Wormhole avaient en quelque sorte approuvé ce transfert de 80 000 ETH comme s’il était 100% légitime.
« La transaction qui a retiré 80 000 EPF était en fait l’attaquant transférant 80 000 ETH de Solana à Ethereum. J’ai d’abord pensé que le contrat avait peut-être incorrectement validé les signatures sur le virement, mais les signatures [were] complètement vérifié.
Selon smartcontracts, la première percée et explication partielle est venue d’un transaction sur Solana qui a en quelque sorte frappé 120 000 « Wormhole ETH », enveloppé d’éther sur Solana, sorti de nulle part. Étant donné que le pirate a pu frapper Wormhole ETH sur Solana, il a pu le retirer correctement vers Ethereum.
« Solana est un peu bizarre »
En examinant l’historique des transactions du pirate informatique, il y a une transaction qui a eu lieu juste avant la frappe des 120 000 ETH Wormhole. Dans ce transaction, le pirate frappe seulement 0,1 ETH Wormhole, comme s’il testait la fonction avec une petite quantité.
Un examen plus approfondi de l’historique des transactions du pirate révèle que le pirate a fait un dépôt de 0,1 ETH d’Ethereum en Solana. Bien que l’attaquant n’ait pas effectué de dépôt ETH de 120 000 ETH dans le contrat intelligent Wormhole sur Ethereum, ce dépôt a quelque chose d’intéressant.
Comme l’explique smartcontract dans son tweet, les transactions qui ont frappé Wormhole ETH sur Solana déclenchaient un contrat intelligent Wormhole une fonction appelé « complete_wrapped ». L’un des paramètres pris par cette fonction est un « message de transfert », essentiellement un message signé par les gardiens du pont qui dit quel jeton frapper et combien.
« Solana est un peu bizarre, donc ces paramètres sont en fait des contrats intelligents eux-mêmes. Mais l’important est de savoir comment ces contrats de « message de transfert » sont créés. Ici se trouve le transaction qui a créé le message de transfert 0,1 ETH », tweete smartcontracts.
Qui vérifie les dames ?
Ce contrat de « message de transfert » est créé en déclenchant un une fonction appelé « post_vaa ». La chose la plus importante est que post_vaa vérifie si le message est valide en vérifiant les signatures des tuteurs. Cette partie semble assez raisonnable, dit smartcontracts, mais c’est cette étape de vérification de la signature qui a tout cassé.
La fonction « post_vaa » ne vérifie pas réellement les signatures. Au lieu de cela, à la manière typique de Solana, il y a un autre contrat intelligent qui est créé en appelant le « verify_signatures » une fonction. Un de contributions à la fonction «verify_signatures» se trouve un programme «système» intégré à Solana qui contient divers utilitaires que le contrat peut utiliser.
Dans « verify_signatures », le programme Wormhole tente de vérifier que l’exécution qui s’est produite juste avant le déclenchement de cette fonction était que le Secp256k1 fonction de vérification de signature a été exécutée.
« Cette fonction de vérification est un outil intégré censé vérifier que les signatures données sont correctes. La vérification des signatures a donc été sous-traitée à ce programme. Mais c’est là qu’intervient le bogue », tweete smartcontracts.
Les contrats Wormhole utilisaient la fonction load_instruction_at pour vérifier que la fonction Secp256k1 a été appelée en premier, mais la fonction load_instruction_at a été obsolète relativement récemment car elle ne vérifie pas qu’il s’exécute par rapport à l’adresse système réelle!
Jeu terminé
Selon les smartcontracts, l’appelant est censé fournir autant saisir l’adresse système du programme en cours d’exécution, mais le pirate a fourni une adresse système différente.
Voici cette adresse système utilisée comme entrée pour le « verify_signatures » pour le dépôt légitime de 0,1 ETH :

Mais voici la transaction « verify_signatures » pour le faux dépôt de 120k ETH :

Ce n’est pas l’adresse système !
« En utilisant ce « faux » programme système, l’attaquant pourrait effectivement mentir sur le fait que le programme de vérification de signature a été exécuté. Les signatures n’étaient pas vérifiées du tout ! », tweete smartcontracts.
«Après ce point, la partie était terminée. L’attaquant a fait croire que les gardiens avaient signé un dépôt de 120 000 $ dans Wormhole sur Solana, même s’ils ne l’avaient pas fait. Tout ce que l’attaquant devait faire maintenant était de rendre son argent « fictif » réel en le retirant à Ethereum. Et un retrait de 80k ETH + 10k ETH plus tard (tout dans le pont sur Ethereum), tout était parti.

Newsletter CryptoSlate
Avec un résumé des histoires quotidiennes les plus importantes dans le monde de la crypto, DeFi, NFT et plus encore.
Obtenez un bord sur le marché des cryptoactifs
Accédez à plus d’informations et de contexte cryptographiques dans chaque article en tant que membre payant de Bord CryptoSlate.
Analyse en chaîne
Instantanés des prix
Plus de contexte
Inscrivez-vous maintenant pour 19 $/mois Découvrez tous les avantages