Un coffre qui répond toujours oui n’est pas un coffre. C’est une porte déguisée. Le 1er octobre 2026, peu après 15 h 08 UTC, cette évidence a coûté environ 305 000 dollars à deux portefeuilles Safe liés à des positions à levier sur Aave v3. Le voleur n’a pas forcé le protocole de prêt. Il a parlé à un module tiers, FlashLoopAdapter, avec la voix d’un faux Safe programmé pour valider n’importe quel contrôle. À la fin de la transaction, il restait autour de 114 ETH dans ses mains. Le reste du mouvement, bien plus large, servait surtout à rembourser une dette pour libérer le collatéral.
L’affaire a été signalée par Defimon Alerts, puis décortiquée par SlowMist. Stani Kulechov, fondateur d’Aave, a tout de suite séparé les couches. Le contrat touché n’est pas un contrat Aave v3. C’est un adaptateur externe, construit par-dessus le protocole, et l’incident n’a eu aucun effet sur Aave v3 lui-même. Cette phrase change la lecture. Elle ne diminue pas la perte. Elle situe la faille là où elle se trouve vraiment, dans la confiance accordée à un module autorisé à agir au nom d’un coffre.
Ce que le module a laissé passer
FlashLoopAdapter servait à ouvrir et à fermer des boucles de levier sur Aave v3 pour les Safes qui l’avaient activé. L’idée, sur le papier, est banale dans la finance décentralisée. On dépose un collatéral, on emprunte, on réinvestit l’emprunt dans le même actif ou dans un dérivé étroitement lié, puis on recommence. Le rendement espéré vient de l’écart entre le rendement du collatéral et le coût de la dette. Le risque, lui, vient du levier, de la liquidité et, ici, du logiciel qui automatise le geste.
SlowMist a pointé les fonctions open() et close(). Au lieu de prouver de façon indépendante que l’appelant était un vrai Safe déjà connu, le module demandait à l’appelant s’il avait bien activé FlashLoopAdapter. En clair, il interrogeait ISafe(msg.sender).isModuleEnabled(address(this)). Un contrat malveillant peut implémenter cette fonction et renvoyer vrai à chaque fois. Le contrôle devient alors une question posée à la personne qu’on essaie justement d’écarter.
Ce que l’on sait, et ce que l’on ne doit pas confondre.
- La perte nette retenue par l’attaquant tourne autour de 114,09 ETH, soit environ 305 000 dollars au moment du signalement.
- Deux Safes ont été touchés, et ils partageaient le même propriétaire unique.
- Aave v3 n’a pas été identifié comme le composant vulnérable.
- Le chemin d’attaque passe par un module Safe déjà activé, pas par une signature du propriétaire au moment du vol.
Une fois le faux Safe accepté, une seconde faiblesse a pris le relais. La fonction interne de swap acceptait un routeur et des données d’appel fournis par l’appelant. L’attaquant n’a pas envoyé ces données vers un vrai routeur d’échange. Il a désigné l’un des coffres victimes comme routeur, et il a demandé l’exécution de execTransactionFromModule, la fonction qui permet à un module activé d’agir sur le Safe. FlashLoopAdapter était déjà autorisé. L’appel a donc été accepté.
Le faux Safe, ou l’art de répondre à sa propre question
Imaginez un vigile qui ne vérifie pas la carte, mais demande au visiteur s’il est sur la liste. Si le visiteur dit oui, la porte s’ouvre. C’est à peu près le schéma décrit. Le module faisait confiance à l’interface annoncée par l’appelant. Il ne vérifiait pas que cet appelant figurait dans un registre contrôlé, ni que le bytecode correspondait à un Safe authentique, ni que l’adresse avait été enregistrée au préalable par le propriétaire.
Cette erreur est classique, et elle reste dangereuse parce qu’elle a l’air raisonnable au premier coup d’œil. Un Safe expose bien une méthode pour savoir si un module est activé. S’en servir semble propre. Le problème apparaît dès que l’on se rappelle qu’Ethereum ne garantit pas l’identité d’un contrat par son nom. N’importe qui peut déployer un contrat qui parle le même langage et ment sur le fond.
Defimon Alerts a ajouté un détail important sur le callback. Les contrôles effectués pendant le retour d’appel n’ont pas arrêté la transaction, parce que le contrat de l’attaquant jouait aussi le rôle de fournisseur de liquidité éclair. L’attaquant était donc présent des deux côtés de l’échange de rôles. Il prêtait, il appelait, il répondait aux questions du module, puis il redirigeait l’exécution vers le coffre réel.
Ce n’est pas un contrat Aave v3, c’est un adaptateur externe tiers construit par-dessus Aave, sans aucun effet sur Aave v3.
Stani Kulechov, fondateur d’Aave
Pourquoi le module pouvait tout faire une fois dedans
Un module Safe n’est pas un simple assistant de lecture. Lorsqu’il est activé, il peut proposer des transactions qui s’exécutent sans repasser, à chaque fois, par le flux habituel des propriétaires. C’est précisément ce qui le rend utile pour une stratégie de boucle. Ouvrir, ajuster, fermer une position à levier demande plusieurs étapes. Un humain qui signe chaque geste perd du temps et paie plus de frais. Un module bien borné peut enchaîner ces étapes.
La contrepartie est sévère. La permission accordée au module devient une permission accordée à tout ce que le module accepte d’exécuter. Si l’authentification du module est faible, l’attaquant n’a pas besoin de voler une clé. Il a besoin de convaincre le module de parler au coffre. Ici, le coffre avait déjà dit oui à FlashLoopAdapter. Le reste n’était plus qu’une question de paramètres.
Le contrat vulnérable a été indiqué à l’adresse 0x16bb8b912da187870c23ec6756bb3fad061283d8. L’adresse associée à l’attaquant est 0x42c2633438609881c8fBAb82414eb9A0c45F9353. Ces identifiants ne prouvent pas une identité hors chaîne. Ils permettent seulement de suivre les fonds et de relire la transaction. Dans ce genre d’affaire, l’adresse est une piste, pas un nom.
Le film de l’attaque, dette d’abord, collatéral ensuite
Le vol n’a pas consisté à vider un solde déjà libre. Les actifs intéressants étaient engagés dans une position. Pour les sortir, il fallait d’abord alléger la dette. L’attaquant a pris un prêt éclair de WETH sur Morpho, puis il a remboursé environ 1 335 WETH de dette Aave appartenant au premier Safe, 0xcfedf95a3653a128dfc2e4288758a1a1850d169f.
Ce remboursement a libéré le collatéral lié à la boucle. Par le chemin d’exécution compromis, le Safe a ensuite retiré environ 1 306 weETH vers une adresse contrôlée par l’attaquant. Un second coffre, 0xe3b23e47df7cd85876ac6cb05bdb9d7cd5b28520, a perdu 6,4 weETH par le même module. Defimon a précisé que les deux Safes avaient le même propriétaire unique. La surface n’était donc pas un parc de milliers d’utilisateurs, mais deux coffres liés à une même main.
Une partie du weETH retiré a été convertie en WETH pour solder le prêt éclair et les autres jambes de la transaction. À l’arrivée, l’attaquant conservait environ 114,1 ETH. SlowMist a chiffré la perte autour de 114,09 ETH et a évoqué le remboursement d’environ 1 300 WETH de dette pour déverrouiller le collatéral. Le grand chiffre du retrait ne doit pas être lu comme un profit. Une large part du capital a traversé la transaction pour refermer la position avant que le reliquat puisse être emporté.
C’est un point que les titres raccourcissent trop souvent. Voir 1 306 weETH bouger impressionne. Comprendre que ce mouvement rembourse d’abord une dette, puis laisse un profit net bien plus petit, change l’échelle du préjudice. Le préjudice reste réel. Il n’est simplement pas égal à la somme de tous les jetons qui ont changé de main pendant le bloc.
Aave est resté debout, le module non
Ni SlowMist ni Defimon Alerts n’ont décrit une faille dans les contrats centraux d’Aave v3. Le protocole a servi de marché de collatéral et de dette. Il a fait ce qu’on lui demandait. Une dette a été remboursée. Un collatéral est devenu retirable. Du point de vue d’Aave, l’ordre venait d’un chemin autorisé par le coffre, via un module que ce coffre avait activé.
Cette distinction n’est pas un détail de communication. Elle décide de ce qu’il faut corriger. Si le cœur du protocole était cassé, chaque position du marché serait en question. Ici, le risque se concentre sur les coffres qui ont branché cet adaptateur, et plus largement sur la manière dont un module tiers hérite du droit d’agir. Les autres utilisateurs d’Aave v3 ne sont pas, sur la base des alertes publiées, exposés par ce contrat précis.
On peut quand même tirer une leçon plus large. Un protocole sain ne protège pas automatiquement les outils construits au-dessus de lui. Le nom Aave dans une interface, dans un fil ou dans un module ne signifie pas que le code a été écrit, audité ou maintenu par l’équipe du protocole. FlashLoopAdapter est un contrat séparé. Il utilise Aave. Il n’est pas Aave.
Le levier, cette machine qui amplifie aussi les erreurs
Une boucle sur un actif de rendement consiste à empiler exposition et dette. Avec du weETH, on cherche souvent à garder une exposition à l’ether en jeu tout en empruntant de l’ether ou un actif très proche, afin de redéposer et d’agrandir la position. Le gain espéré est mince à chaque étage. Le levier le rend visible. Il rend aussi visible la moindre erreur de gestion, de liquidation ou de permission.
Dans cette affaire, le levier a dicté la forme de l’attaque. Sans dette, le collatéral n’aurait pas été verrouillé de la même façon. Sans prêt éclair, l’attaquant aurait dû apporter lui-même les 1 335 WETH pour débloquer la position. Le prêt éclair a transformé une opération qui demande un gros capital en une opération qui demande surtout un ordre d’instructions correct à l’intérieur d’une seule transaction.
Morpho a fourni la liquidité temporaire. Là encore, le marché de prêt n’est pas le coupable du contournement. Il a prêté contre une promesse de remboursement dans le même bloc, promesse tenue puisque l’attaquant a soldé l’emprunt. Le profit est sorti de l’écart entre le collatéral libéré et la dette remboursée, après frais et conversions.
Deux coffres, un propriétaire, une surface étroite
Le fait que les deux Safes partagent un seul propriétaire réduit l’image d’une contagion massive. Cela ne rend pas l’incident anecdotique. Un coffre à propriétaire unique est souvent choisi précisément pour industrialiser une stratégie. On y place le module, on y concentre le collatéral, on laisse l’automatisation travailler. La concentration du capital devient alors la concentration du risque.
Le second coffre n’a perdu que 6,4 weETH. L’essentiel du préjudice est venu du premier. Cette asymétrie suggère des positions de taille très différente, ou un second coffre déjà peu engagé au moment de l’attaque. Elle rappelle aussi qu’un module activé sur plusieurs coffres multiplie les portes, même si une seule porte contient le gros du trésor.
Pour un lecteur qui utilise des Safes, la question pratique est simple. Quels modules sont activés, qui les a écrits, et quelle transaction peuvent-ils encore lancer sans nouvelle signature. La réponse ne se trouve pas dans le solde affiché. Elle se trouve dans la liste des modules, souvent moins regardée que le solde lui-même.
Ce que SlowMist a isolé dans le contrôle d’accès
L’alerte de SlowMist résume la cause racine en une ligne technique. Le contrôle d’accès de l’ouverture et de la fermeture se contente de demander au message caller s’il a activé le module. Cette réponse est falsifiable. Ensuite, l’échange interne accepte un appel brut vers un routeur choisi par l’appelant. Les deux bouts sont donc contrôlables. L’authentification ment, puis l’exécution obéit.
Un correctif sérieux ne se limite pas à changer une ligne. Il faut une liste d’appelants enregistrée par le propriétaire, une vérification que l’adresse est un Safe dont le code est attendu, et une interdiction d’appeler des cibles arbitraires. Le routeur devrait être fixé, ou choisi dans une liste blanche. Les données d’appel ne devraient pas pouvoir viser execTransactionFromModule sur le coffre qui a activé le module. Chaque liberté laissée à l’appelant est une liberté laissée à l’attaquant.
Les équipes qui réutilisent ce modèle feraient bien de relire leurs modules comme si l’appelant était hostile par défaut. Ce n’est pas une posture pessimiste. C’est le modèle de menace normal d’Ethereum. Tout le monde peut appeler une fonction publique. Tout le monde peut déployer un contrat qui imite une interface.
Septembre, déjà, un module et un exécuteur trop permissifs
L’incident n’arrive pas dans un désert. En septembre, un autre coffre Safe sur Ethereum a été visé autour de 2 900 rsETH. BlockSec avait remonté la piste jusqu’à des contrôles d’autorisation faibles dans un contrat exécuteur relié à un module activé. Un robot de valeur extractible a devancé la tentative, récupéré les actifs, et la transaction d’attaque initiale a fini par échouer. Le butin a changé de mains avant même que l’auteur initial encaisse.
Le parallèle n’est pas une copie conforme. Les contrats diffèrent, les montants aussi, et le rôle du robot n’est pas le même. Le motif, lui, revient. Un module activé élargit la surface. Un exécuteur qui fait trop confiance à son appelant transforme cette surface en chemin de sortie. Les propriétaires croient souvent que la sécurité du coffre se résume au seuil de signatures. Elle se résume aussi à la liste de ce qui peut signer à leur place.
Mai, le module Squid et les coffres sur deux réseaux
En mai, un exploit lié au SquidRouterModule a vidé des Safes sur Ethereum et sur Base. Environ 3 à 3,2 millions de dollars ont été pris sur 86 portefeuilles. Les attaquants visaient un module tiers. Squid avait indiqué que ses contrats principaux de routeur et les fonds des utilisateurs qui n’étaient pas exposés par ce module n’étaient pas touchés. Le schéma est cousin. Le service central continue. Le branchement Safe devient la route.
Quelques jours plus tard, les utilisateurs de Gnosis Pay avaient été invités à retirer leurs fonds après un problème touchant le module de délai Zodiac. Martin Köppelmann, cofondateur de Gnosis, avait expliqué que la faille pouvait permettre à un attaquant d’initier des transactions depuis des Safes utilisant le module concerné. Encore une fois, la promesse du module, automatiser ou retarder, devenait le vecteur.
FlashLoopAdapter s’inscrit dans cette lignée, avec un montant plus modeste et une mécanique très lisible. Faux appelant, paramètres d’appel contrôlés, module déjà activé, prêt éclair pour déverrouiller, retrait du collatéral, remboursement, profit net. La lisibilité ne rassure pas. Elle montre que l’attaque n’avait pas besoin d’une obscure corruption de mémoire. Elle avait besoin d’une hypothèse fausse sur l’identité de l’appelant.
Le calendrier, heure par heure
Defimon Alerts situe la détection au 1er octobre 2026, à 15 h 08 min 57 s UTC. Le réseau est Ethereum. Le type retenu est un défaut de contrôle d’accès. Le message public décrit un module Safe de boucle Aave v3, dont les fonctions d’ouverture et de fermeture font confiance à tout expéditeur capable de répondre correctement à la question sur l’activation du module.
Le 2 octobre, SlowMist publie son alerte et chiffre le préjudice autour de 114,09 ETH. Le même jour, Stani Kulechov rappelle la frontière entre le protocole et l’adaptateur. crypto.news relaie l’ensemble en début de matinée UTC, sous la signature de Rony Roy. La séquence est donc courte. Détection, analyse, clarification du protocole, reprise presse. Pour les fonds déjà sortis, cette rapidité n’annule pas le transfert. Elle limite surtout les mauvaises lectures.
Une mauvaise lecture aurait été de conclure qu’Aave v3 était exploitable par n’importe qui. Une autre aurait été de traiter les 1 306 weETH comme un profit encaissé. Les deux erreurs circulent vite quand un fil technique est résumé en une ligne. Le chiffre de 305 000 dollars, lui, correspond au reliquat conservé, pas au collatéral brut retiré.
Ce que voit un prêteur éclair dans ce genre de bloc
Un prêt éclair n’est pas un crédit à la consommation. C’est une avance qui doit revenir avant la fin de la transaction. Si le remboursement manque, toute la transaction revient en arrière, comme si rien ne s’était passé. L’attaquant peut donc emprunter une somme énorme sans collatéral préalable, à condition de refermer la boucle dans le même souffle.
Ici, le WETH emprunté sur Morpho a servi à payer la dette Aave du Safe. Une fois la dette réduite, le collatéral weETH est devenu disponible. Le module compromis a ordonné le retrait. Une partie des jetons a été revendue pour reconstituer le WETH dû. Le bloc s’est terminé avec un prêt soldé et un surplus en ether. Vu de l’extérieur, c’est une transaction dense. Vu de l’attaquant, c’est un enchaînement dont chaque étape finance la suivante.
Cette dépendance au prêt éclair explique aussi pourquoi l’attaque était atomique. Pas de dépôt préalable visible pendant des jours. Pas de montage lent. Une transaction, ou un petit ensemble très serré, suffit quand le contrôle d’accès cède dès le premier appel.
weETH, WETH, et l’écart qui devient le butin
Le collatéral retiré était du weETH, une forme enveloppée d’ether mis en jeu. La dette remboursée était en WETH, de l’ether enveloppé utilisé comme unité de compte liquide. Les deux ne sont pas interchangeables au centime près en permanence. Leur écart, les frais de swap et le coussin de liquidation expliquent qu’on ne récupère pas exactement la même quantité des deux côtés.
Retirer 1 306 weETH après avoir remboursé environ 1 335 WETH peut sembler défavorable si l’on oublie le prix relatif et la structure de la position. Le profit final de 114 ETH environ indique qu’après conversions, le collatéral libéré valait davantage que la dette soldée et les frais. C’est cohérent avec une boucle encore solvable. L’attaquant n’a pas liquidé une position sous l’eau. Il a dénoué une position saine au bénéfice d’un tiers.
Pour le propriétaire, la nuance est amère. La stratégie fonctionnait assez pour que le collatéral couvre la dette et laisse un excédent. Cet excédent, plus une partie du capital propre engagé dans la boucle, est parti parce que le droit d’agir avait été délégué trop largement.
La délégation, cœur utile et cœur fragile du Safe
Le Safe existe pour éviter qu’une seule clé décide de tout. Seuils, propriétaires multiples, modules, gardes, délais. Chaque couche répond à un risque. Le module répond au risque de l’opération répétitive. Il crée en même temps un risque de logiciel. Une clé peut être volée. Un module peut être mal écrit. Les deux mènent à une sortie de fonds, par des chemins différents.
Activer un module devrait être traité comme l’ajout d’un propriétaire silencieux. Ce propriétaire ne demande pas de confirmation à chaque ordre s’il est déjà autorisé. Il faut donc connaître son code, son périmètre, et la façon dont on le retire. Le retrait lui-même doit rester possible par les propriétaires, sans dépendre du module. Sinon, une compromission devient permanente.
Dans le cas présent, rien n’indique publiquement que les propriétaires ne pouvaient plus désactiver le module après coup. L’attaque a simplement été plus rapide que toute réaction humaine. À 15 h 08 UTC, le chemin était déjà emprunté. Désactiver ensuite protège le reste. Cela ne ramène pas les 114 ETH.
Comment lire une alerte sans se tromper de couche
Quand un message cite Aave, Safe, Morpho et un nom de contrat inconnu, le réflexe est de tout mettre dans le même sac. Il vaut mieux séparer quatre couches. Le marché de prêt, ici Aave v3, qui tient les positions. Le coffre, ici deux Safes, qui détient les droits. Le module, FlashLoopAdapter, qui a reçu le droit d’agir. Le financement temporaire, Morpho, qui a avancé le WETH.
La faille siège dans la troisième couche. Les autres ont exécuté des règles déjà publiques. Cette grille évite deux paniques inutiles. La première serait de fuir Aave v3 sans distinction. La seconde serait d’ignorer le module sous prétexte que le protocole central est sain. Les deux attitudes manquent la cible.
Elle évite aussi de blâmer le prêt éclair en tant que tel. Sans contrôle d’accès cassé, le prêt éclair n’aurait rien eu à déverrouiller. L’outil est neutre. Il devient un levier d’attaque seulement lorsqu’une fonction autorisée accepte de déplacer le collatéral d’autrui.
Ce que les intégrateurs devraient vérifier avant d’activer
Avant d’activer un module de boucle, la lecture minimale tient en quelques questions. Qui peut appeler les fonctions sensibles. Comment l’appelant est-il identifié. Le module peut-il appeler une adresse quelconque. Les données d’appel sont-elles contraintes. Le module peut-il se rappeler lui-même à travers le coffre. Existe-t-il une pause, un délai, un plafond par transaction.
Si l’identité de l’appelant repose sur une méthode implémentée par l’appelant, la réponse est déjà mauvaise. Si le routeur est un paramètre libre, la réponse est mauvaise aussi. Si ces deux libertés coexistent, le module ne devrait pas être activé sur un coffre qui contient une position réelle. L’audit, s’il existe, doit être lu sur ces points précis, pas seulement sur la présence d’un logo rassurant.
Les équipes qui proposent ce genre d’adaptateur ont, de leur côté, une obligation de conception. Fixer les cibles. Enregistrer les coffres au moment de l’activation, dans un stockage contrôlé par le module, plutôt que de redemander à l’appelant. Séparer la fonction qui prépare un swap de toute fonction capable d’exécuter un appel arbitraire. Nommer clairement le contrat pour qu’on ne le confonde pas avec le protocole qu’il utilise.
Le piège du nom partagé
FlashLoopAdapter a été présenté comme un module de boucle Aave v3. La formulation est exacte sur l’usage. Elle est dangereuse sur la marque. Beaucoup de lecteurs entendent le nom du protocole et concluent que le protocole est en cause. Les précisions de Kulechov coupent court à cette fusion. Elles n’effacent pas le besoin, pour les interfaces, de dire qui a déployé le module et qui en assure le suivi.
Dans la finance décentralisée, les marques voyagent plus vite que les adresses. Un tableau de bord peut afficher Aave parce qu’il lit une position Aave, tout en passant par trois contrats intermédiaires. L’utilisateur voit le marché. Il ne voit pas toujours l’adaptateur. L’incident du 1er octobre montre le prix de cet angle mort, même à l’échelle de deux coffres seulement.
Une bonne interface afficherait le module activé à côté du solde, avec l’adresse et la date d’activation. Une meilleure interface permettrait de le retirer en un geste aussi visible que le dépôt. Tant que le module reste une ligne technique cachée, il restera le parent pauvre de la vigilance.
Ce que l’on peut reconstituer sans surinterpréter
Les sources publiques permettent de tenir les faits suivants. Un adaptateur personnalisé gérait des boucles Aave v3. Son contrôle d’accès était contournable par un faux Safe. L’attaquant a utilisé un prêt éclair Morpho, remboursé environ 1 335 WETH, retiré environ 1 306 weETH du premier coffre et 6,4 weETH du second, puis conservé autour de 114 ETH. Les deux coffres avaient le même propriétaire. Aave v3 n’est pas le contrat vulnérable.
Ce que ces sources ne disent pas doit rester en dehors du récit. On ne connaît pas, ici, l’identité réelle du propriétaire ni celle de l’attaquant. On ne sait pas si un audit formel avait couvert FlashLoopAdapter. On ne sait pas si des fonds ont été gelés ensuite, ni si une négociation a été ouverte. Inventer ces suites serait transformer une alerte en roman.
On peut en revanche décrire le mécanisme sans inventer d’intention morale. L’enchaînement est celui d’un profit extractible dès lors que le module obéit. Le mobile économique suffit. Le reste appartient aux enquêteurs et aux explorateurs de blocs.
Une grille pour les prochains modules de boucle
Les stratégies de boucle ne vont pas disparaître. Elles répondent à une demande réelle de rendement sur collatéral. Le travail utile consiste à les borner. Un module sain connaît ses coffres. Il refuse les appelants inconnus. Il n’accepte pas un routeur libre. Il plafonne le montant dénoué par transaction. Il émet un événement lisible à chaque ouverture et à chaque fermeture. Il peut être mis en pause par une clé séparée de la clé d’opération.
Aucune de ces bornes n’aurait empêché, à elle seule, toutes les attaques de modules vues depuis le printemps. Ensemble, elles auraient rendu celle-ci beaucoup plus difficile. Le faux Safe n’aurait pas passé un registre d’adresses. Le routeur arbitraire n’aurait pas pu être le coffre victime. Le plafond aurait limité le premier retrait. La pause aurait pu couper le second coffre si le premier avait été vu à temps.
Le coût de ces bornes est une perte de souplesse. C’est précisément le coût qu’il faut accepter quand le module tient le droit d’exécuter. La souplesse se paie en surface d’attaque. La surface, ici, a été facturée environ 305 000 dollars.
Pourquoi le chiffre net compte plus que le chiffre brut
Les alertes sérieuses distinguent le flux et le résidu. SlowMist parle d’environ 114,09 ETH. Defimon Alerts parle d’une perte de 305 000 dollars et d’un reliquat d’environ 114,1 ETH. Les deux se rejoignent. Le remboursement d’environ 1 335 WETH et le retrait d’environ 1 306 weETH décrivent la mécanique, pas le bénéfice.
Cette hygiène de lecture devrait devenir un réflexe. Un pont qui brasse un milliard n’a pas perdu un milliard. Une liquidation qui déplace un collatéral n’a pas forcément créé un profit équivalent. Dans le cas du FlashLoopAdapter, brasser la position était la condition pour voler l’excédent. Confondre les deux gonfle la peur et brouille la comparaison avec d’autres incidents.
À côté des 3 millions du module Squid au printemps, 305 000 dollars font figure d’affaire contenue. À l’échelle d’un propriétaire unique, c’est une coupure nette. Les deux échelles sont vraies en même temps. L’incident est limité dans sa contagion, lourd pour les coffres touchés.
Le rôle des robots et de la mémoire du mempool
En septembre, un robot avait devancé une tentative liée à un exécuteur de Safe. Rien, dans les alertes du 1er octobre, ne décrit un tel duel autour de FlashLoopAdapter. L’attaquant semble avoir mené la séquence jusqu’au profit. Cela ne veut pas dire que la mempool était aveugle. Cela veut dire que les comptes rendus publics ne mettent pas un tiers extracteur au centre de l’histoire.
La différence mérite d’être notée, parce qu’elle change la leçon. Parfois, la faille est réelle mais le butin part vers le premier robot capable de copier la transaction. Parfois, l’auteur de l’exploit encaisse. Dans les deux cas, le correctif est le même. Il ne sert à rien d’espérer que la compétition entre robots protégera les utilisateurs. Cette compétition redistribue le vol. Elle ne le prévient pas.
Les équipes de sécurité qui surveillent les modules activés ont donc intérêt à alerter sur l’activation elle-même, pas seulement sur la transaction de drainage. Une fois le drainage visible, les fonds ont souvent déjà bougé. Le moment utile est l’ajout du module, ou le premier appel inhabituel vers une fonction d’ouverture.
Ce que les portefeuilles peuvent montrer sans devenir illisibles
Un coffre moderne affiche déjà des propriétaires et un seuil. Il peut afficher les modules avec le même rang visuel. Pas une adresse seule. Une phrase. Module de boucle activé, droit d’exécution, contrat externe, retrait possible par les propriétaires. Cette phrase aurait rendu FlashLoopAdapter moins abstrait.
Elle ne remplace pas la lecture du code. Elle déplace l’attention. Beaucoup d’utilisateurs acceptent un module parce qu’une interface de stratégie le propose au moment d’ouvrir une boucle. Le consentement est alors noyé dans l’envie de rendement. Séparer l’écran d’activation de l’écran de dépôt, et demander une signature dédiée, réduit ce mélange.
Les interfaces qui agrègent Aave pourraient aussi marquer les positions dont la gestion passe par un adaptateur non officiel. Le marquage ne juge pas la qualité du code. Il empêche la confusion de couche que cette affaire a failli produire dans les titres.
Une chronologie de famille, pas une série de hasards
Mis bout à bout, les épisodes de mai, de septembre et d’octobre racontent la même famille de risques. Un module tiers reçoit un droit fort. Son autorisation est trop large ou trop naïve. Un appelant externe s’en sert. Les contrats centraux du service associé restent souvent intacts, et leurs équipes le disent vite, parce que la confusion commerciale est immédiate.
FlashLoopAdapter ajoute un chapitre très pédagogique, parce que la faille tient dans une question mal posée. Demander à l’appelant s’il est autorisé, c’est confondre une interface avec une preuve. La preuve devrait venir d’un état que l’appelant ne contrôle pas. Tant que les modules de stratégie répètent cette confusion, les alertes se ressembleront, seuls les noms de contrats changeront.
Le montant, cette fois, est resté dans l’ordre de quelques centaines de milliers de dollars. La prochaine fois, le même schéma sur un coffre plus gros produirait un titre bien plus lourd, sans que la technique soit plus sophistiquée. La sophistication n’est pas le bon critère. La permission l’est.
Ce que peut faire le propriétaire d’un Safe dès maintenant
Sans lien magique vers un bouton universel, la démarche reste concrète. Ouvrir le coffre. Lister les modules. Retirer ceux dont le code n’a pas été relu depuis l’activation. Vérifier qu’aucune stratégie de boucle ne dépend d’un adaptateur à routeur libre. Séparer, si possible, le coffre qui expérimente et le coffre qui porte la position principale.
Si un module de ce type est encore actif, le geste prioritaire est la désactivation, pas l’optimisation du rendement. Une boucle peut être rouverte plus tard, par un chemin revu. Un drainage, lui, ne se rejoue pas à l’envers sans le bon vouloir de l’adresse qui détient les fonds.
Les deux adresses citées permettent à chacun de vérifier s’il est concerné. Si l’on n’est pas le propriétaire de ces Safes, et si l’on n’a pas activé ce contrat précis, l’alerte est une leçon, pas une urgence personnelle. La leçon vaut quand même le temps de lecture.
Le protocole, l’adaptateur, et la phrase qui remet l’ordre
La phrase de Stani Kulechov est courte, et elle suffit à recadrer. Contrat tiers. Construit par-dessus Aave. Effet nul sur Aave v3. On peut la discuter sur le ton, pas sur la frontière technique décrite par les alertes. Les fonctions cassées sont celles de FlashLoopAdapter. Les fonctions d’Aave ont accepté un remboursement et un retrait venus d’un chemin que le coffre avait armé.
Cette frontière protège les utilisateurs du protocole qui n’ont jamais touché le module. Elle ne protège pas ceux qui l’ont activé. Elle oblige aussi les commentateurs à nommer le bon contrat dans le titre, pas seulement la marque la plus connue du voisinage. Nommer Aave sans nommer FlashLoopAdapter, c’est raconter une autre histoire.
Nommer les deux, et dire lequel a cédé, c’est rendre service. C’est ce que les alertes du 1er et du 2 octobre ont fait, avec des niveaux de détail différents. SlowMist a donné la cause. Defimon a donné la séquence et les montants intermédiaires. Kulechov a donné la frontière. Ensemble, ils permettent un récit stable.
Une lecture froide du profit
Autour de 114 ETH, le gain est assez grand pour justifier une transaction soignée, assez petit pour ne pas bouleverser le marché de l’ether. Il ne crée pas de pression visible sur le prix. Il ne vide pas un bassin de liquidité entier. Il rappelle seulement qu’une position personnelle, bien construite, peut être dénouée par quelqu’un d’autre si le droit d’exécution traîne au mauvais endroit.
Le caractère personnel de la perte ne la rend pas moins instructive. Les grands drains collectifs font les gros titres. Les drains de coffres spécialisés font les leçons de conception. Celle-ci est nette. Une interface n’est pas une identité. Un paramètre d’appel n’est pas un détail. Un module activé n’est pas un accessoire.
Les prochains adaptateurs de boucle seront jugés sur ces trois phrases, pas sur le rendement affiché dans une capture d’écran. Le rendement, le 1er octobre, est parti avec le collatéral.
Questions qui restent ouvertes, sans combler les trous
Plusieurs points restent hors du périmètre public utilisé ici. Le code complet n’est pas reproduit dans les alertes, seulement la logique fautive. On ignore le nombre exact de coffres qui avaient activé le module au-delà des deux cités. On ignore si d’autres réseaux portaient le même adaptateur. On ignore la suite judiciaire ou la possibilité d’un retour de fonds.
Ces inconnues n’affaiblissent pas le mécanisme décrit. Elles interdisent seulement d’élargir le bilan. Tant qu’une seconde adresse de module ou un second réseau n’est pas documenté, le récit reste celui d’Ethereum, de deux Safes, d’un contrat, d’un attaquant, d’un prêt éclair et d’un profit net autour de 114 ETH.
Si une mise à jour des équipes de sécurité élargit le périmètre, la lecture devra suivre les adresses, pas les rumeurs. En attendant, la prudence raisonnable consiste à traiter ce contrat comme compromis dans sa conception, et à ne pas l’activer.
Ce que cette affaire change dans la façon de raconter un exploit
Un bon compte rendu d’exploit nomme le contrat, le réseau, l’heure, le vecteur, le profit net et ce qui n’a pas été touché. FlashLoopAdapter s’y prête. Le réseau est Ethereum. L’heure de détection est connue à la seconde. Le vecteur est un contrôle d’accès falsifiable, prolongé par un appel arbitraire. Le profit net est autour de 114 ETH. Ce qui n’a pas été touché, c’est Aave v3.
Raconter moins, c’est laisser le lecteur croire que le marché de prêt a été forcé. Raconter plus, en inventant un audit absent ou une arrestation imaginaire, c’est quitter l’information. Entre les deux, il y a assez de matière pour comprendre comment un oui programmé a ouvert deux coffres.
Le détail qui reste en tête n’est pas le montant. C’est la question posée au mauvais interlocuteur. Tant que des modules demanderont à l’inconnu s’il a le droit d’entrer, des inconnus répondront oui, et des positions à levier se dénoueront dans la foulée, dette d’abord, collatéral ensuite, profit à la fin.
