Un attaquant a siphonné environ 779 000 $ dans les contrats Ethereum du pont zkLink Nova le 28 octobre, en une seule transaction confirmée à 22 h 21 UTC. Selon la société de sécurité Blockaid, qui a donné l’alerte environ quatre heures plus tard, 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 diverge, compared with simply holding the same tokens in a wallet. It becomes permanent when the provider withdraws.">il a injecté sur Ethereum une racine de lot falsifiée par l’intermédiaire d’un relayeur public, puis validé des retraits d’ETH et de jetons vers une adresse de son choix. zkLink a pris la parole à 09 h 06 UTC le 29 octobre : l’équipe parle d’une attaque « en cours » et propose à l’auteur une prime de 20 % s’il restitue les fonds.
La transaction sur Etherscan montre deux contrats qui paient en même temps. Celui qu’Etherscan nomme « zkLink Nova: zkLink contract », qui détient l’ETH, a envoyé 22,43 ETH. Le contrat « zkLink Nova: ERC20 Bridge » a envoyé 11 jetons différents. Tout est parti vers le même portefeuille, celui qui a signé la transaction. Cryptopolitan, sur la base des prix d’Etherscan, chiffre l’ensemble du retrait à 778 625,84 $.
Les estimations de la perte divergent de quelques milliers de dollars, surtout parce que chaque source a valorisé les jetons à un moment différent. Blockaid a avancé un chiffre provisoire d’environ 786 000 $ et parle d’une attaque toujours en cours. La base de données de piratages de DefiLlama, consultée vers 11 h 55 UTC le 29 octobre, indique 783 100 $. zkLink n’a communiqué aucun montant.
Ce qui est sorti du pont zkLink Nova, jeton par jeton
Plus des trois quarts de la perte tiennent à un seul actif : le pufETH, jeton de restaking liquide émis par Puffer. Le reste se répartit entre d’autres jetons de restaking et de staking, deux stablecoins et un peu de bitcoin enveloppé.
| Actif | Quantité envoyée | Origine |
|---|---|---|
| pufETH | 245,74 | Pont ERC-20 |
| ETH | 22,43 | Contrat zkLink (réserve d’ETH) |
| USDC | 18 113,45 | Pont ERC-20 |
| USDT | 3 360,90 | Pont ERC-20 |
| ezETH | 12,57 | Pont ERC-20 |
| rsETH | 6,87 | Pont ERC-20 |
| STONE | 6,30 | Pont ERC-20 |
| mstETH | 2,64 | Pont ERC-20 |
| mswETH | 2,48 | Pont ERC-20 |
| rswETH | 0,50 | Pont ERC-20 |
| wstETH | 0,47 | Pont ERC-20 |
| WBTC | 0,17 | Pont ERC-20 |
Cryptopolitan évalue le seul pufETH à environ 613 500 $ au prix d’Etherscan. Les ETH valaient environ 52 000 $ au cours affiché par Etherscan à 11 h 58 UTC le 29 octobre. Pour les lecteurs qui détiennent des jetons comme le pufETH, l’ezETH ou le rsETH sans savoir exactement ce qu’ils sont, notre guide du restaking et des jetons de restaking liquide explique comment ils sont émis et rachetés.
Comment une racine de lot falsifiée est passée, selon Blockaid
Nova ne règle pas directement sur Ethereum. Les transactions sont regroupées en lots, les lots sont vérifiés, puis une courte empreinte de chacun, la racine de lot, est envoyée aux chaînes où les utilisateurs retirent leurs actifs. Sur Ethereum, les contrats qui détiennent les actifs déposés libèrent un retrait dès qu’il correspond à une racine qu’ils ont acceptée. TokenPost décrit ce fonctionnement dans son compte rendu de l’attaque.
Le récit de Blockaid, relayé par Cryptopolitan et TokenPost, est le suivant : l’attaquant a injecté, par un relayeur public, une racine qui ne correspondait à aucun lot réel, puis s’en est servi pour valider des retraits depuis la réserve Ethereum de Nova vers « des destinataires de son choix ». Les journaux d’événements de la transaction collent à cette séquence : un événement SyncBatchRoot, des événements du Linea L1 Message Service, puis des événements WithdrawalFinalized, le tout dans une seule transaction qui a coûté environ 0,00116 ETH de frais.
La transaction n’a pas appelé directement les contrats de zkLink. Elle est passée par un contrat dont le code source n’est pas publié, 0xD5f162B6…f3E6Aff07, qu’Etherscan montre déployé par le portefeuille destinataire lui-même à 18 h 51 UTC, trois heures et demie avant le siphonnage. Ce contrat n’a effectué aucune autre transaction.
Ce que le résumé de Blockaid n’explique pas, c’est l’étape décisive. Personne n’a dit publiquement comment une racine falsifiée a franchi les contrôles du contrat. Le message de zkLink désigne comme cible un troisième élément, son contrat « Arbitrator » sur Ethereum et Optimism, sans préciser ce qui a défailli. Aucun média n’a fait état de clés d’administrateur volées. DefiLlama range l’incident sous « Cross-Chain Message Spoofing », une classification et non un constat.
Le schéma est connu. Plus tôt ce mois-ci, NEAR Intents a publié l’analyse d’un bug qui permettait à une fausse « notification » de dépôt de créer 3,8 millions de dollars de fonds fantômes : là aussi, un système a agi sur un message qu’il aurait dû rejeter. Notre explication du fonctionnement des ponts et de la messagerie cross-chain détaille d’où viennent ces messages et qui est censé les vérifier.

Où est passé l’argent dans les 40 premières minutes
Coindaro a consulté l’historique du portefeuille destinataire sur Etherscan vers 11 h 55 UTC le 29 octobre. Ses premiers ETH, 0,027 ETH, sont arrivés à 15 h 49 UTC le 28 octobre depuis une adresse qu’Etherscan étiquette « FixedFloat: Hot Wallet 2 ». FixedFloat est un service d’échange instantané ; l’étiquette est celle d’Etherscan pour cette adresse et ne dit rien, en soi, de l’identité de celui qui a acheté ces ETH. À 16 h 01 UTC, le portefeuille a déposé 1 USDC dans le pont ERC-20 de Nova. À 17 h 49 UTC, il a envoyé un message via le Message Service L1 de Linea, et à 18 h 51 il a déployé le contrat utilisé dans l’attaque.
La conversion a commencé trois minutes après le retrait. À 22 h 24 UTC, le portefeuille a racheté 132 pufETH auprès de Puffer contre 141,95 ETH enveloppés, et à 22 h 28 il a vendu les 113,73 pufETH restants sur Curve pour 123,26 ETH. L’USDC et le WBTC ont été échangés sur Curve contre 32 157,74 DAI au total. Entre 22 h 42 et 22 h 44 UTC, cinq autres échanges sont passés par le routeur de MetaMask et ont transformé le rsETH, le STONE, l’USDT, le rswETH et le proof of stake coin with a protocol that stakes it for you and issues a transferable token (such as Lido stETH or rETH) representing the deposit plus rewards, which you can use or sell while the coins stay staked.">wstETH en ETH.
Puis l’ETH est sorti en trois virements en trois minutes. Au cours de 2 324 $ pour l’ETH relevé à 11 h 46 UTC le 29 octobre, les 303,06 ETH envoyés valent environ 704 000 $.
| Heure (UTC, 28 oct.) | Envoyé | Vers (abrégé) |
|---|---|---|
| 22 h 55 | 12,57 ezETH | 0x211B4aeB…Fb7E09C6A |
| 22 h 58 | 101 ETH | 0x211B4aeB…Fb7E09C6A |
| 23 h 00 | 100 ETH | 0x2D5a8AAb…402BAfB0 |
| 23 h 01 | 102,06 ETH | 0x75Dcf339…b58Dc0F3 |
| 23 h 03 | 32 157,74 DAI | 0x75Dcf339…b58Dc0F3 |
Quand Blockaid a publié son alerte à 02 h 24 UTC, le portefeuille était presque vide depuis plus de trois heures. Lors de notre vérification, il détenait encore environ 11 000 $ en mswETH et mstETH. Nous n’avons pas suivi plus loin les trois portefeuilles de destination, et aucun média n’a signalé de transferts vers un mixeur comme Tornado Cash. Blockaid dit avoir identifié deux adresses d’attaquant, mais les médias qui ont relayé son alerte ne les ont pas citées : impossible de dire si elles correspondent à celles-ci.
zkLink propose une prime de 20 % et parle d’une attaque en cours
La première réaction de zkLink est venue sur son compte X @zkLink_Official à 09 h 06 UTC le 29 octobre, près de 11 heures après la transaction. L’équipe dit avoir repéré « une attaque en cours visant le contrat Arbitrator de zkLink Nova sur Ethereum et Optimism » et indique que ses ingénieurs travaillent à la contenir. Elle demande aux responsables de s’arrêter et de restituer les fonds, offre une prime « white hat » de 20 % et assure qu’aucune autre action ne serait engagée dans ce cas.
Le message ne donne ni montant de la perte ni cause. Il ne précise pas si des fonds ont été pris sur Optimism, si les contrats Ethereum sont suspendus, ni si les utilisateurs ayant fait transiter des actifs par le pont seront remboursés. Cette prime est le double des 10 % que l’équipe du pont Cysic avait proposés à son attaquant plus tôt ce mois-ci ; l’offre avait été suivie, un jour plus tard, de l’envoi de 300 ETH vers Tornado Cash par l’attaquant.
Les contrats ont continué de fonctionner comme avant. Cryptopolitan a rapporté que l’indicateur de pause de la réserve d’ETH affichait encore « not paused » à 02 h 29 UTC, avec environ 0,001 ETH restant à l’intérieur, et The Defiant indique lui aussi que la réserve n’était toujours pas suspendue après l’alerte. Etherscan montre deux demandes de dépôt d’utilisateurs passées dans ce même contrat à 01 h 28 et 06 h 05 UTC le 29 octobre ; à 11 h 58 UTC, le contrat contenait environ 0,62 ETH.
À 11 h 19 UTC, une adresse qui envoie les mises à jour de lots à la réserve a appelé une fonction nommée « Open Range Batch Root Hash ». La même adresse avait passé le même appel chaque jour du 20 au 28 octobre : il ne s’agit donc pas, à lui seul, d’un changement de cap.

Ce qu’est zkLink Nova, et ce qu’on promettait aux détenteurs de ZKL
zkLink Nova est un réseau de couche 3 bâti sur Linea, lui-même une couche 2 d’Ethereum. Il se présentait comme un agrégateur censé rassembler en un seul endroit les actifs de plusieurs réseaux de couche 2 d’Ethereum. L2BEAT le classe parmi les validiums : les données de transactions ne sont pas publiées sur Ethereum, et un séquenceur unique rend disponibles les racines de données.
Le réseau principal a été lancé le 11 mars 2024, et la saison de points « Aggregation Parade » a démarré trois jours plus tard, d’après un article sponsorisé de The Block. L’équipe zkLink a ensuite revendiqué 1,05 milliard de dollars de dépôts en deux mois, un chiffre qu’aucun suivi indépendant n’a confirmé. Le jeton ZKL a une offre de 1 milliard d’unités ; la première distribution NovaDrop a ouvert le 22 juillet 2024 à 12 h 00 UTC avec 5 % de l’offre. Coindaro n’a trouvé aucun compte rendu de réaction du cours du ZKL à l’attaque.
Ce que les utilisateurs du pont Nova peuvent vérifier maintenant
Le message de zkLink ne contient aucune consigne pour les utilisateurs : ce qui suit relève d’informations réunies par Coindaro, pas de recommandations du projet. Les deux contrats Ethereum sont publics et chacun peut les surveiller sur Etherscan : la réserve d’ETH à l’adresse 0x5fD9F73286b7E8683Bab45019C94553b93e015Cf et le pont ERC-20 à l’adresse 0xAd16eDCF7DEB7e90096A259c81269d811544B6B6. Les deux apparaissent par leur nom dans la transaction d’attaque.
- Dans le fonctionnement décrit par TokenPost, les actifs transférés vers Nova sont adossés sur Ethereum à ces deux contrats. Ceux-ci étant vidés, la manière dont les futurs retraits seraient payés reste une question ouverte à laquelle zkLink n’a pas répondu.
- Aucun correctif du contrôle de la racine n’avait été annoncé à la mi-journée UTC le 29 octobre, et la réserve acceptait encore des demandes de dépôt à 06 h 05 UTC.
- Le message de zkLink de 09 h 06 UTC ne mentionne ni remboursement ni procédure de réclamation. De fausses pages de « remboursement » et de « réclamation » sont une suite fréquente des piratages de ponts : une telle page ne viendrait donc pas de ce message.
- Les chiffres de cet article peuvent évoluer : Blockaid comme zkLink décrivent une attaque en cours, et zkLink cite Optimism en plus d’Ethereum.
Le prochain repère sera une réponse de l’attaquant à l’offre de prime, ou le récit de zkLink sur la façon dont la racine falsifiée a été acceptée. D’ici là, le dossier tient en une transaction sur Ethereum, l’explication qu’en donne Blockaid et 303 ETH sortis du portefeuille destinataire en moins de 40 minutes.
