Une attaque par flash loan détourne la gouvernance de X100 et draine 4,85 millions de dollars
Points clés
- •Les attaquants ont emprunté environ 1,94 million d'USDT via un flash loan Aave, acheté 38 200 jetons X et les ont placés via deux contrats nouvellement déployés pour saisir deux des trois sièges du Sénat gouvernant de X100 en une seule transaction.
- •Comme les contrats de gouvernance de X100 permettaient aux sénateurs nouvellement enregistrés de voter et d'exécuter des propositions dans la même transaction, l'attaquant a drainé les actifs du trésor et de la liquidité sans aucun timelock ni période d'attente.
- •Les produits initiaux d'environ 4,75 millions de dollars ont été convertis en environ 2 022 ETH via UniswapX, dont 1 600 ETH ensuite répartis entre quatre portefeuilles nouvellement créés détenant 400 ETH chacun.
- •Le jeton X a chuté de plus de 96 % selon les données de CoinGecko, bien que la liquidité restante extrêmement faible rende le prix affiché peu fiable comme mesure de la valeur de marché réalisable.
- •Au moment de l'évaluation de Blockaid le 24 octobre, environ 12,2 millions de X restaient dans le contrat Freezer, et récupération des fonds, remédiation du contrat ou arrangement d'indemnisation n'avait été divulgué.

X100, un projet DeFi basé sur Ethereum, a perdu environ 4,85 millions de dollars en USDT le 24 octobre après que des attaquants ont utilisé des flash loans pour prendre le contrôle de son système de gouvernance et exécuter des propositions malveillantes contre le trésor et les réserves de liquidité du projet.
En capturant deux des trois sièges du Sénat gouvernant de X100, les attaquants ont pu approuver et exécuter des transactions sans attendre aucun délai de gouvernance. L'attaque initiale a généré environ 4,75 millions de dollars de produits, et des retraits supplémentaires ont porté la perte totale à 4,85 millions de dollars.
La société de sécurité blockchain Blockaid a signalé l'exploitation en cours à 14h49 UTC dans un post X, identifiant plusieurs transactions malveillantes ciblant le contrat Freezer du protocole. Une mise à jour ultérieure de la société a identifié environ 550 000 jetons X supplémentaires extraits d'une position de liquidité sur Uniswap, tandis qu'environ 12,2 millions de X restaient dans le Freezer.
Le flash loan assure une majorité au Sénat
La première attaque a commencé à 14h11 UTC, lorsqu'un portefeuille a emprunté environ 1,94 million d'USDT via un flash loan Aave et utilisé ces fonds pour acheter 38 200 jetons X. L'attaquant a réparti les jetons entre deux contrats nouvellement déployés, chacun plaçant légèrement plus de 19 000 X dans le système Freezer de X100. Ces dépôts ont évincé les membres existants du Sénat et donné à l'attaquant le contrôle de deux des trois sièges de l'organe de gouvernance.
La majorité requise assurée, l'attaquant a soumis et exécuté immédiatement une proposition ordonnant au trésor de vendre 400 000 X dans un pool de liquidité PancakeSwap V3 nouvellement créé. Comme le pool manipulé ne contenait qu'une faible quantité d'USDT, l'attaquant a acquis les jetons du trésor pour environ 35,68 USDT avant de retirer la liquidité.
L'attaquant a ensuite vendu environ 131 703 X via un pool Uniswap V3 existant, recevant environ 6,69 millions d'USDT. Après avoir remboursé le flash loan, la transaction a rapporté environ 4,75 millions de dollars.
L'exploitation a été possible parce que les contrats de gouvernance de X100 permettaient aux sénateurs nouvellement enregistrés de voter et d'exécuter des propositions dans la même transaction blockchain. Les flash loans, qui offrent un emprunt sans garantie devant être remboursé dans une seule transaction, ont fourni à l'attaquant le capital temporaire nécessaire pour acquérir le pouvoir de vote. Le protocole n'avait aucune période d'attente effective entre l'acquisition de l'autorité de gouvernance et l'exercice du contrôle sur les actifs du trésor. Les timelocks, qui diffèrent l'exécution d'une proposition à un bloc ultérieur, constituent une protection largement utilisée dans la gouvernance DeFi précisément parce qu'ils donnent aux détenteurs de jetons le temps de réagir — et de sortir — avant que les transactions affectant le trésor ne prennent effet. L'incident X100 montre comment, dans les systèmes de gouvernance pondérés par les jetons, le méisme de vote lui-même peut devenir la surface d'attaque, même lorsque les contrats du jeton et du trésor d'un protocole ne sont pas directement exploités.
Les produits convertis en Ether
Les produits initiaux ont été rapidement échangés contre environ 2 022 ETH via UniswapX, les cryptomonnaies résultantes étant transférées vers un autre portefeuille Ethereum. Cette adresse a ensuite distribué 1 600 ETH entre quatre portefeuilles nouvellement créés, chacun recevant 400 ETH, tandis qu'environ 423 ETH restaient à l'adresse de consolidation lors de l'analyse initiale des transactions.
D'autres attaques de gouvernance ont suivi le premier retrait. À 14h35 UTC, une deuxième transaction a utilisé une stratégie de flash loan similaire pour capturer des sièges du Sénat et retirer des positions de liquidité Uniswap V3 contrôlées par le contrat Freezer, générant environ 96 382 USDT de produits supplémentaires. Une troisième transaction à 14h40 UTC a utilisé le chemin de gouvernance compromis pour retirer une autre position de liquidité contenant environ 550 000 jetons X. Ces jetons ont été extraits séparément du total de 4,85 millions d'USDT.
Les transactions provenaient de portefeuilles émetteurs différents, et les enquêteurs n'ont pas établi s'ils étaient contrôlés par des attaquants distincts ou coordonnés par une seule partie.
Le jeton plonge tandis que la vulnérabilité reste exposée
Le jeton de X100 a subi une forte chute après l'attaque, les données de trading, telles que reflétées sur CoinGecko, indiquant une baisse supérieure à 96 % alors que la liquidité disparaissait de son principal pool de trading. Le pourcentage cité doit être interprété avec prudence, car la liquidité restante était extrêmement faible, rendant le prix affiché du jeton peu fiable comme mesure de la valeur de marché réalisable.
L'attaque est la dernière en date d'une série d'exploitations de gouvernance récentes menées par flash loans. En août, un attaquant a obtenu une autorité de gouvernance suffisante sur Term Finance pour exécuter des propositions malveillantes et drainer environ 8,5 millions de dollars de coffres de prêt basés sur Ethereum. Une attaque distincte par flash loan contre Shibarium le 5 septembre a également impliqué l'acquisition temporaire de jetons liés à la gouvernance, bien que cet incident ait visé l'autorité des validateurs et les actifs du pont plutôt que l'exécution immédiate de propositions sur le trésor. Dans ces incidents, l'autorité sur les actifs du protocole était liée à des jetons pouvant être acquis en une seule transaction, laissant les seuils de quorum et d'approbation comme dernière ligne de défense.
Dans le cas de X100, l'exigence d'approbation aux deux tiers du Sénat n'a offert que peu de protection, car l'autorité de vote pouvait être acquise et exercée immédiatement avec du capital emprunté.
Dans les heures suivant l'exploitation, le projet n'avait pas publié de rapport d'incident public ni confirmé de plan de récupération, et Blockaid continuait de mettre en garde contre une exposition active après avoir identifié la troisième transaction. Environ 12,2 millions de X restaient dans le contrat Freezer au moment de l'évaluation de la société le 24 octobre. Aucune récupération confirmée des fonds retirés, aucune remédiation du contrat et aucun arrangement d'indemnisation n'avaient été divulgués. Le sort des jetons encore détenus dans le contrat Freezer, et la question de savoir si le projet publiera un post-mortem ou apportera des changements de gouvernance, demeuraient les principales questions en suspens après l'évaluation de Blockaid du 24 octobre.