Un flash loan s'empare de deux sièges de gouvernance : quelles leçons tirer du piratage de X100 ?

ETH
USDT
Sécurité DeFiGouvernance DAOattaque de gouvernanceX100Vol de fondsFlash loan
il y a 1 heureSource: blockweeks.com
Un flash loan s'empare de deux sièges de gouvernance : quelles leçons tirer du piratage de X100 ?


Original | Odaily Planet Daily (@OdailyChina)

Author | Asher (@Asher_0210)

Flash Loan Seizes Two Governance Seats, What Does the X100 Exploit Teach the Industry?

Le 24 octobre, le projet DeFi Ethereum X100 a subi une attaque de gouvernance, avec environ 4,85 millions d'USDT volés. Selon les données de GMGN, la capitalisation boursière du token X est passée d'environ 760 millions de dollars avant l'attaque à environ 24 millions de dollars, soit une chute de plus de 96 % en une seule journée.

Flash Loan Seizes Two Governance Seats, What Does the X100 Exploit Teach the Industry?

Une trésorerie initialement gérée conjointement par trois sièges du « Sénat » a été prise en main par un hacker qui a utilisé des fonds empruntés via un prêt flash pour s'emparer de deux des trois sièges. Avec la majorité des voix en main, le hacker a soumis une proposition malveillante, puis a utilisé les sièges qu'il contrôlait pour la faire voter, amenant la trésorerie à approuver une transaction qui envoyait les actifs à lui-même. Après la réussite du premier cycle d'attaque, d'autres attaquants ont successivement exploité le même mécanisme de gouvernance pour continuer à détourner les actifs du projet.

Ci-dessous, Odaily Planet Daily passera en revue l'ensemble du processus de cette attaque de gouvernance, ainsi que les risques de sécurité de la gouvernance DAO exposés derrière l'incident X100.

Emprunt de 1,94 million de dollars, comment le hacker a-t-il capturé deux sièges du « Sénat » ?

La trésorerie de X100 est gérée par un « Sénat » de trois sièges appelé Senate, dont les membres votent pour décider d'opérations telles que la vente de tokens de la trésorerie et le déploiement de liquidités. Tant que deux des sièges sont contrôlés, les propositions peuvent être adoptées et les actifs de la trésorerie mobilisés. Les détenteurs déposent le token du projet X dans le contrat Freezer, choisissent de le geler pour un, trois ou cinq ans, puis paient des frais d'inscription de 100 X pour participer à l'élection. Les trois sièges sont classés en temps réel selon le solde gelé actuel des adresses participantes, et les trois premiers obtiennent les droits de gouvernance.

Ce mécanisme ne restreint pas le fait qu'un même contrôleur obtienne des sièges via plusieurs adresses, et ne fixe pas non plus de période d'attente pour que les droits de gouvernance prennent effet. Un attaquant n'a qu'à faire entrer simultanément les soldes gelés de deux adresses contrôlées dans le top trois pour saisir immédiatement une majorité de voix ; une proposition adoptée peut également être exécutée immédiatement, permettant la capture des sièges et le transfert des actifs dans la même transaction.

Avant l'attaque, l'adresse du deuxième siège avait gelé environ 19 000 X. À 22 h 11 le 24 octobre, le hacker a emprunté environ 1,94 million d'USDT via un prêt flash Aave, acheté des X et les a distribués à deux contrats auxiliaires pour respectivement effectuer le gel et faire campagne pour l'élection. Chaque contrat a gelé 19 000,000001 X, soit seulement un millionième de token de plus que le deuxième siège d'origine, et a pourtant occupé simultanément les deuxième et troisième sièges, poussant le deuxième siège d'origine hors de la liste de gouvernance.Flash Loan Seizes Two Governance Seats, What Does the X100 Exploit Teach the Industry?

Après avoir obtenu la majorité des voix, comment le hacker a-t-il fait pour que les actifs de la trésorerie arrivent entre ses propres mains ?

Deux votes « oui » permettent au trésor de vendre 400 000 X pour 35,68 $

Après avoir obtenu deux sièges, le pirate a immédiatement soumis une proposition malveillante exigeant que le trésor vende 400 000 X dans un pool PancakeSwap V3 X/USDT créé par le pirate, avec le montant minimum reçu fixé à zéro, puis a voté en faveur via un autre contrat contrôlé, permettant à la proposition de passer avec deux votes et d'être exécutée immédiatement. Selon l'analyse de GoPlus, X100 permet aux propositions de gouvernance de spécifier le pool de négociation mais manque d'une protection efficace du montant minimum de transaction. Le pirate pouvait à la fois décider où le trésor vendait les jetons et fixer lui-même les conditions de transaction, puis approuver la transaction avec les votes majoritaires qu'il contrôlait.

Le pool susmentionné a été créé par le pirate dans la même transaction, avec seulement environ 100 $ de liquidité injectée. Lorsque le trésor y a vendu 400 000 X, le pool ne pouvait payer qu'une petite quantité d'USDT, et comme le montant minimum reçu était nul, la transaction n'a pas échoué en raison d'un rendement excessivement faible. Finalement, le trésor a cédé 400 000 X et n'a reçu qu'environ 35,68 $ en retour. Le pirate a ensuite retiré la liquidité du pool qu'il avait lui-même créé, récupéré les X qui s'y trouvaient, et vendu une partie des jetons dans le pool de négociation Uniswap V3 X/USDT existant en échange d'USDT. Après avoir remboursé le prêt flash et autres frais, le premier pirate a réalisé un profit d'environ 4,75 millions d'USDT.

De l'emprunt de fonds pour acheter des jetons et s'emparer de sièges, à l'approbation de la vente de jetons à bas prix du trésor et à l'encaissement pour rembourser le prêt, tout a été accompli dans la même transaction. Les jetons cédés par le trésor sont devenus les jetons d'encaissement du pirate, tandis que les USDT du véritable pool de négociation ont servi à rembourser le prêt et ont été convertis en produits de l'attaque.

Les attaques ultérieures se sont succédé, où sont allés les fonds volés ?

Environ 24 minutes après la première attaque, un deuxième pirate s'est une nouvelle fois emparé de deux sièges de gouvernance via un prêt flash, a retiré une partie des positions de liquidité Uniswap V3 détenues par Freezer, et a utilisé un pool de négociation qu'il avait lui-même créé pour continuer à transférer des actifs, obtenant environ 96 400 USDT. Environ cinq minutes plus tard, un troisième portefeuille a exploité un contrat auxiliaire laissé par le deuxième pirate qui ne restreignait pas les appelants, empruntant directement ses sièges de gouvernance pour faire passer une proposition et transférer environ 550 000 X. Les deux premières séries d'attaques ont causé une perte totale d'environ 4,85 millions d'USDT, et la troisième série a transféré environ 550 000 X supplémentaires ; les trois séries d'attaques se sont produites en moins d'une demi-heure.

Selon le suivi de Bitquery, le premier pirate a converti les principaux produits en USDT en ETH dans les minutes suivant l'attaque, puis les a dispersés vers cinq portefeuilles, totalisant environ 2 022,86 ETH. Le deuxième pirate a converti les USDT en ETH et les a acheminés via des adresses intermédiaires vers ChangeNOW, l'ensemble du processus de transfert prenant environ 21 minutes.

Une fois l'autorité de gouvernance perdue, le transfert d'actifs a rapidement évolué, passant de l'attaque unique du premier pirate à des siphonnages successifs par plusieurs portefeuilles. Les participants ultérieurs n'avaient même plus besoin d'acheter à nouveau des jetons pour faire campagne ; ils pouvaient utiliser l'autorité existante pour continuer à transférer des actifs.

Un monde on-chain où le coût des attaques de gouvernance est de plus en plus bas

X100 n'est pas un cas isolé, et les attaques de gouvernance n'exigent pas nécessairement que les pirates investissent d'énormes fonds à l'avance. Les attaquants peuvent soit acheter des jetons pour obtenir des droits de vote, soit exploiter des seuils de proposition bas pour chercher des opportunités, tandis que les prêts flash permettent en outre à des fonds empruntés de participer à la conquête du pouvoir de gouvernance.

Depuis le début de cette année, des attaques de gouvernance similaires ont causé à plusieurs reprises des pertes importantes. En juillet, l'attaquant de Bonk DAO a dépensé environ 4,09 millions de dollars pour acheter des jetons représentant 1,003 % de l'offre, dépassant tout juste le seuil d'approbation de gouvernance, puis a transféré environ 20,5 millions de dollars d'actifs via une proposition malveillante, et a même récupéré les jetons mis en staking après la fin du vote. En août, Term Finance a perdu environ 8,5 millions de dollars à cause d'une attaque de gouvernance. Même s'il faut des millions de dollars pour acheter des droits de vote, cet argent n'est peut-être pas le coût finalement supporté par l'attaquant.

Le seuil de certaines tentatives d'attaque n'était même que de quelques centaines de dollars. En mars de cette année, un attaquant de Moonwell a dépensé seulement environ 1 808 $ pour acheter des MFAM et s'auto-déléguer, puis a soumis une proposition malveillante tentant d'obtenir les droits de gestion sur sept marchés de prêt et contrats principaux impliquant environ 1,08 million de dollars de fonds d'utilisateurs. En septembre, un attaquant d'Olas a dépensé seulement environ 135 $ pour verrouiller 5 100 OLAS, dépassant le seuil de proposition. Bien que les deux attaques aient été interceptées, elles montrent que les attaquants n'ont pas nécessairement besoin de détenir une majorité de votes ; le simple fait d'obtenir l'éligibilité à proposer peut créer des opportunités d'attaque.

Le 22 octobre, Arkadiko a également subi une attaque de gouvernance. L'attaquant a acheté suffisamment de DIKO, a voté seul en faveur d'une proposition introduisant un contrat malveillant, sans aucun vote contre pendant le processus, et la perte estimée était d'environ 1,09 million de dollars.

Les droits de gouvernance peuvent être empruntés, et les actifs peuvent être transférés une fois qu'un vote est adopté. Quand le contrôle d'un trésor change de mains si facilement, qui la soi-disant gouvernance décentralisée peut-elle réellement protéger ?



Lien source