ActualitésCryptoUn bug de remboursement de 10 ETH a gelé le trading THORChain sur 10 chaînes

Un bug de remboursement de 10 ETH a gelé le trading THORChain sur 10 chaînes

Auteur: Coindoo·

Points clés

  • •Une réorganisation d'un bloc d'Ethereum le 31 octobre a permis à un seul dépôt de 10 ETH vers THORChain de déclencher 20 ETH de paiements, après le remboursement à la fois du swap crédité et du dépôt lui-même.
  • •Chaque nœud THORChain a enregistré la réorganisation, mais la revérification automatisée du dépôt n'a pas pu s'achever avant la finalisation de l'observation sur la chaîne de THORChain et l'envoi du remboursement.
  • •Un vérificateur de solvabilité automatique a interrompu les swaps ETH, les opérateurs de nœuds ont cessé la signature des transactions en environ deux minutes, et le trading a été suspendu par précaution sur dix chaînes dont ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON et ZEC.
  • •Le destinataire a volontairement restitué les 10 ETH supplémentaires, mais THORChain a averti qu'un acteur malveillant réutilisant un nonce de transaction lors d'une réorganisation pourrait être payé depuis ses coffres sans aucune raison de rembourser.
  • •L'interruption a involontairement retardé le blanchiment des fonds du vol de 6,4 milliards de dollars chez Binance attribué au groupe nord-coréen TraderTraitor, et THORChain n'a fixé aucune date de réouverture, rappelant qu'après l'exploit d'environ 10,7 millions de dollars en mai, une correction et une réouverture comparables avaient pris plus de cinq semaines.
Un bug de remboursement de 10 ETH a gelé le trading THORChain sur 10 chaînes

Le protocole de liquidité inter-chaînes THORChain a gelé le trading sur dix blockchains après qu'une réorganisation d'un bloc d'Ethereum a conduit ses coffres à payer deux fois un même dépôt de 10 ETH. Le protocole permet aux utilisateurs d'échanger des actifs entre les blockchains qu'il relie : les dépôts entrent dans ses coffres, et les opérateurs de nœuds signent les paiements qui en sortent. Il a décrit la séquence des événements dans un post sur X le 1er novembre, indiquant que l'utilisateur avait restitué les 10 ETH supplémentaires et que les développeurs principaux travaillaient aux modifications nécessaires.

Ce que la réorganisation a supprimé

À 11h34 UTC le 31 octobre, Ethereum a remplacé un bloc récent par une version concurrente. Le bloc écarté contenait un dépôt de 10 ETH vers un coffre THORChain, que les observateurs du protocole avaient déjà vu et crédité.

Les blocs de cet âge peuvent encore être remplacés. Ethereum ne considère un bloc comme finalisé qu'après environ deux epochs, soit environ 13 minutes, et rien dans le compte rendu de THORChain ne suggère que l'historique finalisé a changé. La défaillance s'est produite au sein de THORChain, qui a agi sur un dépôt avant qu'Ethereum ne l'ait réglé.

Deux paiements ont suivi. Le swap associé au dépôt crédité n'a pas atteint sa limite de prix, si bien que THORChain a remboursé 10 ETH. Le dépôt de l'expéditeur sur la chaîne acceptée d'Ethereum a ensuite été remboursé lui aussi. Un dépôt de 10 ETH est entré dans le coffre, et 20 ETH en sont sortis.

L'avertissement de THORChain lui-même montre comment un même dépôt pouvait être compté deux fois. Chaque compte Ethereum numérote ses transactions avec un nonce. Une fois le transfert initial disparu avec son bloc, ce nonce pouvait être réutilisé sur la chaîne acceptée. THORChain a écrit que lors de toute réorganisation externe, « un acteur malveillant pourrait effectuer une nouvelle transaction avec le même nonce » et être payé depuis ses coffres.

Chaque nœud a vu la réorganisation. Le remboursement est quand même parti.

La détection n'était pas le problème. Selon THORChain, chaque nœud a enregistré la réorganisation, mais la revérification automatisée censée statuer sur l'état du dépôt n'a pas pu s'achever avant que THORChain ne finalise l'observation sur sa propre chaîne. La documentation Bifrost décrit comment les observations sont annulées lorsqu'une transaction externe disparaît. Le 31 octobre, cette annulation n'est pas survenue avant le paiement du remboursement.

Le post n'explique ni pourquoi la revérification a manqué de temps, ni ce que la correction modifiera. Le remboursement n'a été couvert que parce que le destinataire a choisi de restituer les fonds. Selon la description du défaut par THORChain, celui-ci paie quiconque le déclenche, et une personne synchronisant ses transactions sur une future réorganisation n'aurait aucune raison de renvoyer quoi que ce soit.

Pourquoi un défaut de 10 ETH a gelé dix chaînes

Le vérificateur de solvabilité automatique de THORChain a détecté le déficit et interrompu les swaps ETH. En environ deux minutes, les opérateurs de nœuds ont également cessé la signature des transactions ETH, ce qui bloque les paiements sortants des coffres. Ils ont ensuite interrompu le trading sur d'autres chaînes par précaution, car l'avertissement lié au nonce couvre les réorganisations sur toute chaîne connectée, pas seulement Ethereum.

État des services THORChain au moment du post du 1er novembre :

  • Trading interrompu : ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON, ZEC
  • Trading actif : AVAX, BASE, RUNE, XRPL
  • Paiements sortants : les données d'état du 31 octobre montraient que la signature restait activée sur la plupart des chaînes interrompues, si bien que les paiements en attente pouvaient partir tandis que les nouveaux swaps restaient bloqués.

L'état du trading est celui du post du 1er novembre de THORChain ; l'état de la signature est celui de l'API de statut de THORChain telle que rapportée le 31 octobre.

La liste a déjà évolué une fois. Dans la soirée du 31 octobre, The Defiant rapportait que l'API de statut de THORChain montrait le trading en pause sur 12 des 13 chaînes externes. Au post du 1er novembre, trois d'entre elles avaient été réactivées. THORChain n'a pas indiqué pourquoi ces trois-là sont passées en premier.

Rien de tout cela n'affecte les réseaux sous-jacents. Bitcoin, Ethereum et les autres chaînes continuent de produire des blocs ; les interruptions limitent seulement ce que THORChain traitera pour chacune.

Lu d'une certaine manière, l'incident montre que les dispositifs de sécurité fonctionnent. Le vérificateur s'est déclenché sans intervention humaine, les paiements ont été stoppés en quelques minutes, et l'exposition est restée limitée à 10 ETH. En mai, le même contrôle avait dû interrompre le trading et la signature après qu'un exploit a drainé environ 10,7 millions de dollars d'un coffre. Ce que le vérificateur ne peut pas faire, c'est réparer la logique d'observation, c'est pourquoi les interruptions se sont étendues au lieu de s'atténuer une fois le coffre reconstitué.

Trois votes pour arrêter, quatre pour passer outre

De telles interruptions sont des paramètres opérationnels, et la documentation de gouvernance de THORChain permet à un petit groupe de nœuds de les modifier. Un paramètre nécessite au moins trois votes de nœuds actifs et doit recueillir plus de voix que toute valeur concurrente ; en cas d'égalité, le paramètre actuel est maintenu.

Ce seuil a déjà été éprouvé publiquement. Lors du blanchiment en février 2025 des fonds volés à Bybit, trois validateurs ont voté pour interrompre le trading ETH, et d'autres opérateurs de nœuds ont annulé le vote presque immédiatement. Le compte rendu du 1er novembre de THORChain note également qu'interrompre une chaîne ne donne pas aux nœuds le contrôle des actifs des coffres. Arrêter l'activité et signer les transferts sont des pouvoirs distincts.

Une interruption que THORChain refusait d'utiliser contre des blanchisseurs

Le 28 septembre, face aux appels à geler les fonds issus du piratage de Bitget, THORChain a écrit sur X qu'une interruption du réseau est une mesure de sécurité d'urgence destinée à protéger le protocole, et avait refusé d'en utiliser une contre ces fonds. Le défaut de réorganisation est exactement ce type d'urgence, et l'interruption qu'il a déclenchée a malgré tout coincé les blanchisseurs.

Chainalysis, qui attribue le vol de 6,4 milliards de dollars chez Binance au groupe nord-coréen TraderTraitor, a déclaré le 1er novembre que THORChain avait « involontairement retardé le blanchiment d'une quantité importante de fonds volés à Binance ». Ce retard provient de la même caractéristique qui frustre les utilisateurs ordinaires : une chaîne interrompue ne traite les swaps de personne.

Ce qui doit se passer avant le retour des swaps

La documentation développeur de THORChain déconseille d'envoyer des fonds vers une chaîne interrompue, car les transactions peuvent rester non traitées jusqu'à la levée de l'interruption. Le post du 1er novembre n'a donné aucune date de réouverture. Les opérateurs de nœuds réactiveront chaque chaîne une fois qu'ils la jugeront sûre.

Trois éléments montreraient que le défaut est corrigé et non simplement en pause : la publication par THORChain du changement dans sa gestion des réorganisations externes, la mise à niveau des opérateurs de nœuds vers cette correction, et le retour de la signature ETH en même temps que le trading sur les chaînes interrompues. Après l'exploit de mai, ce parcours s'est étendu d'un correctif d'urgence à une correction complète et à une réouverture du trading sur plus de cinq semaines. C'est une référence pour le processus, pas un calendrier pour celui-ci.

Les 10 ETH restitués ont réglé le paiement du 31 octobre. La réactivation de la signature ETH serait le premier signe public que les opérateurs font confiance à THORChain pour gérer la prochaine réorganisation.