Capitalisation 2,61 T $ −1,80 % sur 24 heuresVolume 24 h 61,80 Md $Dominance BTC 59,3 %ETH 10,6 %Fear & Greed 34 PeurCryptos 22 750

Piratage de X100 : 4,85 millions d’USDT vidés après la prise de deux des trois sièges de son Sénat

Le piratage de X100 a vidé environ 4,85 M d’USDT en deux transactions, après la prise de deux des trois sièges du Sénat par prêts éclair. L’équipe se tait.

12 min de lecture

Chaîne brisée abstraite à côté de pièces éparpillées et d’un panneau d’alerte
Sommaire
  1. Sénat de X100 : comment fonctionne la gouvernance, d’après son propre code
  2. Piratage de X100 : comment les attaquants ont pris deux des trois sièges du Sénat
    1. Les deuxième et troisième étapes ont suivi le même chemin
  3. Où sont passés les USDT volés : convertis en environ 2 022 ETH
  4. Environ 12,2 millions de X restent dans le Freezer
  5. Attaque de gouvernance : Beanstalk et Tornado Cash avant X100
  6. Que retenir pour les détenteurs de petits jetons, en France comme ailleurs
  7. Questions ouvertes et points à surveiller

Le piratage de X100, survenu le samedi 24 octobre, a fait sortir environ 4,85 millions d’USDT du principal blockchain that runs exactly as written when it is called, holding and moving funds according to its code, without an intermediary able to change the outcome.">smart contract holding reserves of two or more tokens, supplied by users, that a decentralized exchange uses to execute trades automatically at a price set by a formula.">pool d’échange de X100, un petit jeton ERC-20 d’Ethereum de ticker X. La société de sécurité Blockaid l’a signalé à 14:49 UTC, affirmant qu’un attaquant s’était « emparé de deux des trois sièges du Sénat », l’organe de détenteurs qui décide où se loge la liquidité du projet, et que l’attaque était encore en cours. Le registre d’Ethereum montre comment ces sièges ont été gagnés : les attaquants ont emprunté des USDT pendant quelques secondes, acheté du X avec cet argent et misé juste assez pour dépasser le plus petit des sénateurs.

Deux transactions expliquent les fonds. La première, à 14:11:47 UTC, a laissé 4 749 726 USDT au portefeuille qui l’avait envoyée ; la seconde, à 14:35:59 UTC, a laissé environ 96 382 USDT à une autre adresse. Ensemble, cela fait environ 4 846 108 USDT, ce qui correspond au chiffre de Blockaid : « ~4,85 M$ en USDT réalisés jusqu’ici sur 2 transactions ». Une troisième transaction, à 14:40:47 UTC, a emporté environ 549 916 X.

Rien ne vient de l’équipe de X100. À 17:00 UTC, nous n’avons trouvé aucune déclaration sur le site du projet, sur son canal Telegram, dont le dernier message date du 22 octobre, ni dans les médias qui couvrent l’attaque. Son compte X n’affiche aucun message aux visiteurs non connectés. Aucun rapport d’incident n’a été publié.

wallet. It becomes permanent when the provider withdraws.">Il s’agit d’un petit projet, pas d’un grand protocole de finance décentralisée. DexScreener affichait à 16:50 UTC environ 341 $ de liquidité dans le principal pool X/USDT sur Uniswap, et un jeton en baisse de 96,8 % en six heures. Ce cours est celui d’un pool vidé, pas celui d’un marché où l’on peut encore échanger.

Pour un lecteur français, le dossier rappelle un point simple : un jeton de ce genre s’échange sur une bourse décentralisée, hors de toute plateforme agréée par l’AMF. Aucun prestataire n’est là pour répondre à l’acheteur, et personne n’a annoncé de gel ni de remboursement.

Sénat de X100 : comment fonctionne la gouvernance, d’après son propre code

Sur son site, que nous avons ouvert aujourd’hui, X100 décrit un jeton à offre fixe de 14 000 000 d’unités, dont environ 12 millions forment une réserve de récompenses de staking et environ 1 million est destiné à la liquidité sur les plateformes d’échange. Un Sénat de détenteurs décide où va cette liquidité, parmi cinq actifs (USDT, USDC, WBTC, WETH et X) et trois places de marché : Uniswap v3, Uniswap v4 et PancakeSwap v3. Le site assure qu’il ne peut jamais y avoir plus de 1 000 000 X sur le marché à la fois et que personne, ni créateurs ni sénateurs, ne peut retirer des jetons vers un portefeuille.

Les sièges vont aux détenteurs inscrits qui ont les mises les plus élevées. Pour s’inscrire, un détenteur doit avoir au moins 1 000 X en staking et payer des frais uniques de 100 X. Le Sénat compte trois sièges par défaut et jusqu’à 21 ; une proposition passe avec les voix de plus de la moitié des sièges, soit deux sur trois.

Le contrat de staking est celui que Blockaid appelle le Freezer : son code source vérifié sur Etherscan porte le nom de contrat Freezer, et il détient les X mis en staking, la réserve de récompenses et la logique du Sénat. Le code confirme ce que dit le site sur les sièges et les votes. Il montre aussi un point que le site ne met pas en avant : dès que deux sièges sur trois votent oui, n’importe qui peut exécuter la proposition immédiatement. La période de vote de trois jours est une échéance, pas un délai d’attente. Le site présente l’exécution comme une étape distincte ; rien dans le code n’empêche un contrat de miser, s’inscrire, proposer, voter et exécuter au sein d’une seule transaction.

Le Sénat était tout récent. Le premier détenteur s’est inscrit à 12:07 UTC le samedi. Les premières propositions ont été adoptées entre 12:25 et 12:50 UTC ; la toute première a placé 550 000 X dans le principal pool Uniswap. Moins de deux heures plus tard, les sièges changeaient de mains.

Piratage de X100 : comment les attaquants ont pris deux des trois sièges du Sénat

Avant l’attaque, les trois sièges étaient tenus par des mises de 20 500 X, 19 000 X et 1 000 X, d’après les événements de classement du Sénat sur la blockchain. Personne n’a dit qui contrôle ces adresses, et rien sur la chaîne ne les nomme.

Dans la transaction minée à 14:11:47 UTC, un contrat déployé par le portefeuille 0x7ec2afdf3ec5964899894f8d58afa95cbb8ffd63 a emprunté environ 1,94 million d’USDT, à rembourser dans la même transaction (un prêt éclair, ou flash loan). Il a utilisé cet argent pour acheter environ 38 200 X dans le principal pool Uniswap et les a répartis entre deux nouveaux comptes. Chacun a payé les frais de 100 X et misé 19 000,000001 X, soit un millionième de jeton de plus que les 19 000 X du sénateur en deuxième position. Cela a suffi pour écarter les deux plus petits sénateurs et prendre deux des trois sièges.

Toujours dans la même transaction, l’un des nouveaux sénateurs a proposé un échange, l’autre a voté pour et le contrat attaquant l’a exécuté. Le Freezer a placé 400 000 X dans un pool PancakeSwap créé plus tôt dans cette même transaction avec 100 USDT de l’autre côté, et en a obtenu environ 36 USDT. Les attaquants ont ensuite vendu 131 703 X dans le véritable pool Uniswap, qui a versé 6 693 089,64 USDT. Une fois le prêt remboursé, 4 749 726,10 USDT sont allés au portefeuille qui avait tout déclenché, et environ 268 284 X sont restés dans le contrat attaquant.

Le récit de Blockaid, relayé par TechFlow et d’autres médias, décrit trois attaquants. Sur la chaîne, les trois étapes sont parties de trois portefeuilles émetteurs différents. Nous n’avons trouvé aucun transfert reliant le portefeuille de la première étape aux deux autres, et nous ne tirons aucune conclusion sur la question de savoir si une seule personne ou plusieurs se cachent derrière.

Groupe abstrait de personnes autour d’une clé et d’un cadenas reliés par des nœuds de réseau
Les sièges du Sénat de X100 vont aux plus grosses mises ; les attaquants ont dépassé un sénateur d’un millionième de jeton.

Les deuxième et troisième étapes ont suivi le même chemin

À 14:35:59 UTC, une deuxième transaction, envoyée par 0xfc3facd67138966ab0c841e905b0c4bca1abe92f, a répété le procédé avec un prêt éclair de 1,95 million d’USDT. Deux nouveaux comptes ont misé 19 000,000002 X chacun, un millionième de plus que les comptes de la première étape, et pris leurs sièges. À travers six propositions adoptées dans la même transaction, les positions de liquidité Uniswap V3 du Freezer ont été détruites (« burned »), étape que décrit Blockaid. Environ 96 382 USDT et 9 895 X ont fini à 0xedac2d8905bf2bf0033872d420c4ec6ef1ddd0c8.

À 14:40:47 UTC, une troisième transaction, envoyée par 0xdab137f390df77caa97fd492540e973fd5e2f8c8, s’est servie des sièges gagnés à 14:35:59 pour adopter quatre autres propositions. Le Freezer a retiré une position Uniswap contenant 550 012 X, et ces jetons sont sortis par le pool PancakeSwap : 549 916 X et environ 1 909 USDT sont arrivés à 0x0a67804462f04b0be1c433fb1c2f7fb76e5166f2. Ces chiffres correspondent à l’article de The Defiant sur la troisième transaction. Etherscan montre que l’adresse réceptrice avait envoyé 0,1 ETH au portefeuille émetteur le 1er octobre. Deux transactions ultérieures, à 14:40:59 et 14:41:23 UTC, sont venues d’une autre adresse encore, ont utilisé les mêmes sièges et ont déplacé moins de 300 $.

Où sont passés les USDT volés : convertis en environ 2 022 ETH

Le gros du butin n’est pas resté longtemps en USDT. À 14:16:35 et 14:17:47 UTC, le premier portefeuille a vendu ses 4 749 726 USDT en deux ordres de 2 000 000 et 2 749 726 via UniswapX, le système d’ordres d’Uniswap, où un contrat tiers les a exécutés. Il a reçu environ 851,5 et 1 170,5 ether. L’adresse qui a reçu les USDT, 0x225a38bc71102999dd13478bfabd7c4d53f2dc17, est le contrat qui a rempli ces ordres, pas un portefeuille où l’argent dort.

À 14:18:59 et 14:19:23 UTC, le premier portefeuille a envoyé 1 000 ETH et 1 022,85 ETH à 0x8296721489d0a7E934edd66ea27159B1C88A42e5. Entre 14:39:47 et 14:43:59 UTC, cette adresse a émis quatre transferts de 400 ETH chacun vers quatre nouvelles adresses, et détenait encore 422,86 ETH vers 16:45 UTC. Quelques minutes avant l’attaque, à 14:05:59 et 14:06:59 UTC, le premier portefeuille avait reçu 0,86 ETH pour les frais, d’une adresse qu’Etherscan étiquette comme un portefeuille chaud de FixedFloat. FixedFloat est un service d’échange instantané ; l’étiquette ne dit rien de l’identité de celui qui a passé cet ordre.

Comme le butin est désormais en ether, un gel par Tether, l’entreprise qui peut bloquer des adresses d’USDT, ne l’atteindrait pas. Nous n’avons trouvé aucune mention d’un gel ni d’un blocage des fonds par une plateforme d’échange.

Étape (UTC, 24 octobre)Ce qui a bougéSource
14:11:47, première transaction400 000 X sortis du Freezer ; 4 749 726,10 USDT nets au portefeuille émetteurEthereum, bloc 26263022
14:16:35 et 14:17:474 749 726 USDT vendus pour environ 2 022 ETH via UniswapXEthereum, blocs 26263046 et 26263052
14:35:59, deuxième transactionPositions Uniswap V3 du Freezer détruites ; environ 96 382 USDT et 9 895 X sortisEthereum, bloc 26263143
14:40:47, troisième transaction549 916 X et environ 1 909 USDT sortisEthereum, bloc 26263167
14:49:33Alerte de Blockaid : environ 4,85 M$ en USDT sur deux transactionsBlockaid sur X
Vers 16:4512 165 182 X encore dans le Freezer ; 197,10 USDT restants dans le principal poolEthereum, lectures du contrat
Loupe abstraite au-dessus d’un portefeuille, d’une baie de serveurs et d’une courbe en chute
Les 4,75 millions d’USDT de la première étape ont été échangés en quelques minutes contre environ 2 022 ETH, montre la chaîne.

Environ 12,2 millions de X restent dans le Freezer

L’attaque n’a pas vidé le contrat. Blockaid, via TechFlow, a indiqué qu’environ 12,2 millions de X y restaient ; notre lecture vers 16:45 UTC montrait 12 165 182 X. Sur ce total, 171 563 X sont en staking, dont les 76 000 X que les quatre comptes des attaquants ont misés pour gagner des sièges, et environ 11,99 millions forment la réserve de récompenses. L’essentiel de cette réserve est arrivé le samedi même, quand le portefeuille qui a alimenté le Freezer a envoyé 10 000 000 X à 13:16:47 UTC et 1 997 000 X à 13:24:47 UTC.

Deux des trois sièges étaient encore détenus vers 16:45 UTC par les comptes inscrits à 14:35:59, d’après la liste des sénateurs du contrat. Le compteur du contrat qui applique le plafond de 1 000 000 X sur le marché affichait 999 999,999998 X, presque la limite. Savoir si cela bloque d’autres mouvements dépend de positions que le Freezer peut encore détenir et que nous n’avons pas cartographiées. Blockaid parlait d’une attaque en cours ; nous n’avons vu aucun nouveau retrait du Freezer entre 14:41 et 16:45 UTC.

Attaque de gouvernance : Beanstalk et Tornado Cash avant X100

Prendre le contrôle de la gouvernance d’un projet pour déplacer son argent n’est pas nouveau. Le 17 avril 2022, Beanstalk, un protocole de stablecoin sur Ethereum, a perdu environ 181 millions de dollars quand un attaquant a utilisé des prêts éclair d’Aave, d’Uniswap v2 et de SushiSwap pour obtenir un pouvoir de vote, adopté une proposition malveillante, la BIP-18, et l’a exécutée aussitôt par une fonction d’urgence. L’attaquant a conservé environ 24 830 WETH, alors valorisés quelque 76 millions de dollars, selon le récit de l’attaque de Beanstalk par Rekt.

En mai 2023, la gouvernance de Tornado Cash est tombée à cause d’une proposition qui cachait une fonction supplémentaire. L’attaquant s’est attribué 1,2 million de voix contre environ 700 000 voix légitimes et a pris 483 000 TORN, soit une perte d’environ 2,17 millions de dollars, a rapporté The Block.

X100 réunit les deux problèmes à petite échelle. Comme chez Beanstalk, de l’argent emprunté a acheté le poids décisif le temps d’une transaction. Mais deux sièges suffisaient, et la barre était la mise du deuxième sénateur, 19 000 X : les attaquants ont dépensé environ 1,94 million d’USDT empruntés pour les 38 200 X de leurs deux mises, puis remboursé le prêt dans la même transaction. Sans délai entre le vote et l’exécution, personne n’avait de fenêtre pour réagir.

La semaine a été chargée en piratages. Vendredi, Initia a arrêté sa chaîne et ses rollups après une faille présumée de création illimitée de jetons, et Swell a gelé swETH et rswETH à cause d’une fuite supposée de clé d’administration. Notre guide sur les endroits où les piratages crypto se produisent vraiment explique pourquoi la plupart des pertes viennent des applications et de leurs clés, pas de la blockchain elle-même.

Que retenir pour les détenteurs de petits jetons, en France comme ailleurs

Pour les détenteurs de X, le pool qui donnait un prix au jeton a été vidé, et l’équipe n’a rien dit sur une récupération ou une indemnisation. Le site qualifie X de jeton utilitaire ; cette étiquette ne donne aux acheteurs de droit sur personne.

Pour qui regarde un jeton dont la liquidité est pilotée par un vote, le cas X100 offre une courte liste de points à lire dans le contrat. Combien de voix faut-il pour une décision, et combien coûte un siège par rapport à l’argent qu’il contrôle ? Peut-on acheter un siège et s’en servir dans une seule transaction ? Existe-t-il un délai entre l’adoption d’un vote et son exécution, pendant lequel les détenteurs pourraient voir venir le coup ? Chez X100, les réponses étaient : deux voix, 19 000 X, oui et non.

Questions ouvertes et points à surveiller

  • Une déclaration de l’équipe de X100, et la question de savoir si elle compte modifier les règles du Sénat ou déplacer la réserve de récompenses restante.
  • Les mouvements des 422,86 ETH restés à 0x82967214… et des quatre transferts de 400 ETH envoyés depuis cette adresse.
  • Toute nouvelle proposition du Sénat émanant des deux sièges encore tenus par les comptes inscrits à 14:35:59 UTC.
  • Un compte rendu complet de Blockaid ou d’une autre société de sécurité. À 17:00 UTC, nous n’avons trouvé aucune alerte de PeckShield, Cyvers, CertiK ni SlowMist.

Nous mettrons cet article à jour si le projet ou Blockaid publie davantage de détails.

Sources

  1. Blockaid sur X : exploit en cours sur X100 (24 octobre 2026, 14:49 UTC) x.com
  2. Etherscan : contrat Freezer de X100, code source vérifié et transactions etherscan.io
  3. The Defiant : l’exploit de X100 rapporte 4,85 millions d’USDT après une prise de contrôle de la gouvernance (24 octobre 2026) thedefiant.io
  4. Lettre TechFlow relayant Blockaid sur l’attaque de X100 (24 octobre 2026) techflowpost.com
  5. Rekt : l’attaque de gouvernance de Beanstalk (avril 2022) rekt.news
  6. The Block : un attaquant prend le contrôle de la gouvernance de Tornado Cash (21 mai 2023) theblock.co

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *