Le piratage possible du pont de Connext ! Plus de 70K d'avant-garde

TLDR: L'équipe de chercheurs de Sayfer a découvert une nouvelle vulnérabilité potentielle dans les contrats intelligents du pont inter-chaînes de Connext. Il apparaît que leur système de rémunération des routeurs (utilisateurs qui rendent possibles les transferts sur les chaînes émettrices et réceptrices) est sensible au front-running. En effet, nous avons trouvé plus de 1000 transactions MEV sur la blockchain Ethereum uniquement, pour un total de 70k$ de frais volés.

Prenez-moi aux détails techniques.

Web3 est une vision extraordinaire et révolutionnaire du World Wide Web qui nous offre de nombreuses nouvelles possibilités. Cependant, comme toute nouveauté, elle a ses bons et ses mauvais côtés et la fameuse guerre entre les chapeaux blancs et noirs n'épargne pas le web3. Sans aucun doute, le web3 est devenu le nouveau terrain de jeu des hackers.

En tant qu'entreprise de sécurité, nous trouvons souvent des vulnérabilités qui peuvent être utilisées par les pirates, et dans cet article, nous allons vous présenter l'une d'entre elles, la vulnérabilité frontale des frais de Connext.

Qu'est-ce que Connex ?

Connext est une plate-forme basée sur la blockchain Ethereum qui permet aux utilisateurs d'effectuer des transactions sur différents réseaux compatibles Ethereum. Connext remplit sa fonction sans utiliser de validateur hors chaîne. Il fonctionne via le protocole de transfert Xchain non dépositaire (NXTP) pour ses transferts inter-chaînes.

Architecture de connexion

NXTP est un protocole simple pour les transferts inter-chaînes entièrement non dépositaires et les appels contractuels. La clé à retenir avec ce protocole est que toutes les informations nécessaires aux deux parties sont disponibles sur la chaîne

Chaque fois que quelqu'un transfère de l'argent d'une blockchain à une autre, trois étapes se produisent :

  1. Sélection d'itinéraire : Les utilisateurs sélectionnent les chaînes et les actifs et lancent une enchère avec les informations de transfert. Les routeurs enchérissent pour effectuer le transfert dans une fourchette de temps/de prix.
  2. Préparer: Les utilisateurs envoient une transaction aux contrats NXTP sur la chaîne d'envoi. En voyant l'événement du contrat, les routeurs verrouillent la liquidité sur la chaîne de réception.
  3. Remplir: Les utilisateurs fournissent une signature pour débloquer des fonds sur la chaîne de réception, et les routeurs utilisent la signature révélée pour réclamer la liquidité sur la chaîne d'envoi.

Qu'est-ce que le Front-Running ?

L'exécution en amont consiste à placer une transaction dans une file d'attente en ayant connaissance d'une future transaction. L'exécution en amont sur une plate-forme blockchain se produit normalement lorsqu'un mineur, qui a accès à des informations sur les transactions en attente, passe une commande qui lui rapporterait un profit basé sur une transaction en attente. Par exemple, sur la blockchain Ethereum, le front-running peut se produire lorsque les bots sont capables de citer un prix du gaz plus élevé qu'une transaction en attente, accélérant ainsi son traitement. Cela se produit principalement pour des raisons d'arbitrage.

Mempool est un ensemble de transactions Ethereum qui ont été diffusées sur le réseau et attendent d'être regroupées en blocs. C'est la prémisse de la mise en œuvre du front-running.

Le bot frontal analyse et trouve les cibles qui peuvent être attaquées en analysant en continu les transactions en attente dans le Mempool.

La valeur extractible maximale (ou mineure) (MEV) fait référence aux bénéfices que les mineurs et d'autres entités peuvent récolter en exploitant la transparence de la blockchain pour lancer des transactions rentables avant qu'elles ne soient confirmées.

Les détails techniques

Les routeurs ont deux sources de revenus : frais d'enchères et frais de soumission relais.

Comme expliqué sur Académie Connect:

Frais d'enchères

Chaque fois qu'un utilisateur diffuse sur le réseau Connext en signalant son intention d'effectuer un transfert entre chaînes, les routeurs peuvent répondre avec des offres scellées. Le processus sous-jacent est décrit plus en détail ici : Route Auction. Les offres incluent l'engagement des routeurs à réaliser la transaction dans un délai et une fourchette de prix prédéfinis. Connext associe ensuite l'utilisateur à l'offre la moins chère.

Une fois que le routeur détecte un événement qui contient leur offre signée, le routeur soumet la transaction. Pour inciter le routeur à terminer la transaction, le montant bloqué sur la chaîne de réception est réduit des frais d'enchères, que le routeur reçoit.

Frais de soumission Relayer

L'utilisateur qui a initié la diffusion signe un message une fois que le routeur a préparé la transaction.

Le message est envoyé à un relayeur qui perçoit des frais de soumission. Le relais est généralement un autre routeur. Un relais est utilisé ici pour permettre aux utilisateurs de soumettre des transactions avec des données d'appel arbitraires sur la chaîne de réception sans avoir besoin de gaz pour le faire. Le routeur soumet ensuite le même message signé et termine la transaction du côté de l'expéditeur, déverrouillant le montant d'origine.

Au cours de nos recherches, nous avons constaté que le remplir fonction de l' TransactionManager.sol le contrat manque d'un mécanisme d'authentification particulier, permettant à un attaquant MEV d'exécuter la transaction d'un relais et de voler son relayerFrais.

Les attaquants MEV peuvent rechercher des transactions en attente dans le Mempool qui appellent le remplir fonction de l' Gestionnaire de transactions Contrat. Ils peuvent alors effectuer une attaque par déplacement en soumettant la même transaction au Mempool mais avec des frais de gaz plus élevés. Cela contourne les mesures d'authentification actuellement en place, car l'attaquant copie simplement la transaction, y compris sa signature.

La vulnérabilité derrière cette attaque trouve son origine dans une erreur logique dans le TransactionManager.sol:842.

LibAsset.transferAsset(txData.receiveAssetId, payable(msg.sender), relayerFee);

La frais de relais est envoyé à l'expéditeur du message, sans aucune vérification. Celui qui appelle le remplir fonction obtient d'abord les frais.

Si la transaction favorite dépasse avec succès la transaction d'origine envoyée par le relais, cette transaction légitime est alors annulée avec un '#F:019' code d'erreur, car ce serait la deuxième fois qu'il est rempli.

L'Impact

L'impact financier ici est critique car il s'agit d'une attaque économique qui cible l'un des composants du protocole NXTP - le relais (il est important de noter que les fonds des utilisateurs ne sont actuellement pas en danger). En utilisant des attaques MEV, des attaquants malveillants peuvent potentiellement voler les frais du relais, ce qui entrave l'incitation du relais à exécuter la transaction.

Sans frais suffisamment rentables, les relais peuvent cesser de fournir leur service, ce qui, à terme, pourrait empêcher le protocole NXTP de fonctionner.

Ce scénario n'est pas du tout théorique. Au cours de nos recherches sur le MEV, nous avons découvert que cette attaque était activement exploitée par des bots généraux de premier plan familles que nous suivons actuellement. Ces bots entraînent la perte d'une énorme quantité de fonds sur le réseau Ethereum. 

Depuis son déploiement, nous avons trouvé plus d'un millier d'attaques réussies sur le TransactionManager.sol Contrat. Un tel exemple comprend :

Transaction de l'attaquant :

  1. https://etherscan.io/tx/0xfeedceaa9be3c8bffc1519ec612d2797d63de63bb22aced0e9eb2635d57f2985
  2. https://ethtx.info/mainnet/0xfeedceaa9be3c8bffc1519ec612d2797d63de63bb22aced0e9eb2635d57f2985/

Transaction victime :

  1. https://etherscan.io/tx/0x08b17148c1239a80d7ceead53e888b88fadb0239446b90cf280c0e9cd7b42dff
  2. https://ethtx.info/mainnet/0x08b17148c1239a80d7ceead53e888b88fadb0239446b90cf280c0e9cd7b42dff/

Nous pouvons dire que les deux transactions sont liées au même transfert inter-chaîne en vérifiant la valeur du paramètre de signature dans les données de transaction. Étant donné que les signatures sont les mêmes dans notre exemple ci-dessus, nous savons que les deux expéditeurs essaient d'obtenir le frais de relais, donc l'un d'eux essaie de devancer l'autre. Pour identifier le bot, il suffit de comparer le coût des transactions, la plus chère étant celle de l'attaquant.

Notre équipe a estimé que le montant total des frais prélevés, sur la blockchain Ethereum uniquement, est d'environ 70 XNUMX $.

Rapports

Nous avons signalé cette vulnérabilité à Connext via la plateforme de bug bounty Immunefi. Après un long échange, Connext nous a dit qu'il ne s'agissait pas d'une vulnérabilité et que «c'est par conception ».

Voici leur dernière réponse :

Nous pensons que les contrats intelligents ne sont peut-être pas encore suffisamment sûrs pour les utilisateurs grand public, et nous pensons que des histoires comme celle-ci en sont la cause. Nous pensons que la crypto va changer le monde (si ce n'est déjà fait). C'est pourquoi nous considérons qu'il est de notre responsabilité d'informer le monde sur la façon dont certains protocoles considèrent leurs responsabilités en matière de cybersécurité.

Écrit Par
Avigdor Sason Cohen

Avigdor est chercheur en sécurité web3 chez Sayfer. Il est passionné par les nouvelles technologies blockchain et comment nous pourrions nous assurer de les développer de manière sécurisée.

 

Passer au contenu