Fluid a perdu 215 000 $ après qu’un attaquant a contrôlé les deux clés de distribution des récompenses, vidant les jetons via de fausses racines Merkle et acheminant les produits vers Tornado Cash.
Les jetons de récompense avaient déjà disparu. Le 27 mai, un attaquant détenant les deux clés de signature opérationnelles de Fluid a poussé une fausse liste de récompenses vers les distributeurs Merkle du protocole sur Ethereum, Base et Arbitrum.
Fluid, le protocole DeFi basé sur Ethereum, utilise un système en deux étapes pour distribuer les récompenses : une clé propose une racine Merkle et une seconde clé l’approuve. Comme l’a rapporté BlackHartInc sur X, ces deux rôles étaient détenus par un seul acteur. Le contrôle à deux personnes ne signifiait plus rien dès lors qu’une seule personne détenait les deux clés.
Une personne, deux clés, aucune résistance
La clé de proposition a soumis une racine intéressée au distributeur FLUID à 21:11:11 UTC. Douze secondes plus tard, le même attaquant l’a approuvée en utilisant la clé d’approbation. Vingt-quatre secondes après la proposition initiale, une réclamation a été effectuée en utilisant une preuve Merkle vide.
Cette preuve vide n’était pas un bug. Une liste de récompenses à une seule entrée produit une racine égale à sa seule feuille, donc aucun chemin de preuve n’est nécessaire. Le contrat l’a vérifiée correctement. Rien dans le smart contract n’a été cassé. Selon l’analyse forensique par BlackHart, l’ensemble de l’échec relevait de la garde des clés opérationnelles.
Le même cycle proposition-approbation-réclamation a ensuite été exécuté contre le distributeur GHO à 21:13:59 UTC et un troisième distributeur pour une petite quantité de cbBTC des heures plus tard. Sur les trois chaînes, l’attaquant est reparti avec environ 125,109 FLUID et 51,946 GHO, plus des traces de cbBTC.
Ce qui a réellement quitté le protocole, et ce qui ne l’a pas fait
Les marchés de prêt, les coffres et la liquidité DEX de Fluid n’ont jamais été dans le champ d’application de ces clés. Les contrats vidés étaient uniquement les distributeurs de récompenses. 0xfluid sur X a confirmé que les smart contracts du protocole principal sont restés intacts et que les fonds des utilisateurs n’étaient pas en danger suite à l’incident.
Les FLUID et GHO volés ont été échangés contre environ 103 ether via le routeur d’échange MetaMask. Environ 142,6 ETH ont abouti dans Tornado Cash, acheminés en partie via des portefeuilles relais et en partie par dépôt direct. Les produits L2 de Base et Arbitrum ont été pontés de nouveau vers Ethereum avant le mélange.
Un retrait important d’environ 70 à 110 millions de dollars de Fluid dans les jours qui ont suivi n’était pas une deuxième exploitation. C’était des déposants retirant leurs propres fonds, une panique bancaire due à la confiance. Sans lien avec le vol lui-même, bien que pas exactement sans lien avec le moment de la divulgation.
Le nettoyage, et ce qui n’a pas été dit
Environ dix heures après le premier vol, le 28 mai à 07:05 UTC, l’équipe Fluid a retiré les rôles de proposition et d’approbation compromis de dix distributeurs de récompenses en une seule transaction groupée. Environ 314,000 FLUID et 7,400 USDC des soldes de récompenses restants ont été déplacés vers une adresse sécurisée.
Les communications publiques de l’équipe n’ont décrit qu’une pause des réclamations de récompenses pour mise à jour. Aucune mention d’une compromission de clé. Aucune mention d’une perte. L’exploit lui-même a été rendu public le 31 mai, quatre jours après son occurrence, alors qu’un prêteur avait déjà retiré 77 millions de dollars en USDC à partir du 28 mai.
Pablo Veyrat, co-fondateur de Merkl, a abordé l’épisode sur X. Parlant des choix de conception de son propre protocole, Veyrat a noté sur X que Merkl exécute trois bots de litige indépendants sur des infrastructures totalement séparées, chacun vérifiant les nouveaux arbres Merkle avant qu’une racine ne devienne effective, avec un délai minimum d’une heure entre la publication d’une nouvelle racine et toute réclamation effectuée à son encontre.
Pourquoi un time lock change tout ici
L’ensemble de l’exploit s’est déroulé en moins de 24 secondes, de la proposition à la réclamation. Cette rapidité n’était possible que parce qu’aucun délai n’existait entre l’approbation de la racine et le paiement. Les exploits de clés admin ont frappé la DeFi à plusieurs reprises cette année, et le schéma revient toujours au même fossé : des clés privilégiées sans friction entre l’accès et l’action.
L’évaluation de BlackHart a signalé la sécurité opérationnelle comme le domaine le plus faible dans son évaluation pré-hack de Fluid. Le mode de défaillance exact, deux clés qui pouvaient être transformées en paiement sans gardien indépendant ni période d’attente, était déjà ce que le score avertissait. Les compromissions de clés opérationnelles ne sont pas nouvelles en 2026, mais le cas Fluid ajoute une complication spécifique : la conception à deux clés ressemblait à une sauvegarde jusqu’à ce qu’elle soit détenue par une seule personne.
Le portefeuille de l’attaquant, 0x4925120c…1d3dfb, a réclamé sur plusieurs chaînes à peu près dans la même minute. Aucun plafond de vélocité n’a limité ce qu’un seul cycle pouvait libérer. Aucune alerte en temps réel n’a détecté l’activité anormale avant des heures plus tard.




Laisser un commentaire