Les développeurs de Zcash ont diffusé en urgence des correctifs la semaine dernière après avoir découvert une vulnérabilité critique dans le pool protégé Orchard qui aurait permis à un attaquant de créer une quantité illimitée de ZEC contrefait. Le bug a été trouvé par le chercheur en sécurité Taylor Hornby le 29 mai à l'aide de méthodes formelles assistées par IA, déclenchant un exercice d'urgence qui s'est soldé par un hard fork seulement quatre jours plus tard. Mais en raison de l'architecture de confidentialité de Zcash, qui rend impossible l'audit de l'offre, l'équipe ne peut prouver que l'exploit a été utilisé — ni qu'il ne l'a pas été.
Le bug et sa découverte
La faille se trouvait dans un élément sous-contraint à l'intérieur du gadget de multiplication sur courbe elliptique dans la crate halo2_gadgets, faisant partie du système de preuve à divulgation nulle de connaissance qui sous-tend Orchard. Il était présent depuis l'activation du mainnet d'Orchard en mai 2022 — soit environ quatre ans. Cela signifiait que quiconque en avait connaissance pouvait, en théorie, frapper du ZEC ex nihilo sans laisser de trace sur la chaîne.
Hornby a découvert le problème en utilisant des outils de vérification formelle entraînés sur du code cryptographique. La vulnérabilité affectait toutes les versions de halo2_gadgets antérieures à v0.5.0, orchard avant v0.14.0, et zcashd versions v5.0.0 à v6.12.3.
Correctifs d'urgence déployés
Quelques heures après la divulgation, l'équipe a poussé un soft fork via Zebra 4.5.3 qui a temporairement désactivé toutes les transactions Orchard. Un correctif permanent est arrivé avec le hard fork NU6.2 — Zebra 5.0 — qui s'est activé le 2 juin au bloc 3 364 600 et a corrigé le circuit lui-même. Les utilisateurs sur des nœuds affectés devaient mettre à jour immédiatement pour rester sur la bonne chaîne.
Shielded Labs, qui contribue au développement de Zcash, a déclaré dans un communiqué qu'elle pense qu'une exploitation antérieure est peu probable, mais ne peut pas le prouver de manière définitive. Cette incertitude est inhérente à la conception du système : les pools protégés cachent les montants et les soldes des transactions, rendant cryptographiquement impossible l'audit de l'offre totale.
La question sans réponse
David Schwartz, CTO de Ripple, a commenté le risque pratique. Les détenteurs passifs qui ne déplacent jamais leurs pièces seront en sécurité, a-t-il dit — en supposant que le bug n'ait jamais été déclenché. Mais cette condition ne peut être vérifiée. La seule façon d'en être sûr serait de compromettre le bouclier que Zcash a été construit pour protéger.
C'est un moment rare où la fonctionnalité principale d'une crypto-monnaie axée sur la confidentialité devient son plus grand handicap. Si un attaquant a frappé du ZEC contrefait et l'a introduit dans la circulation, il n'y a aucun moyen de le savoir. L'offre pourrait être gonflée et personne ne le saurait.
Réaction du marché
ZEC n'a pas attendu les réponses. Le prix a chuté de plus de 30 % en une seule séance après la divulgation du 29 mai, atteignant brièvement son plus bas niveau depuis plus d'un mois. La vente massive reflétait non seulement le bug lui-même, mais aussi l'incertitude quant à son impact potentiel. Une crypto-monnaie confidentielle qui ne peut pas vérifier sa propre offre est difficile à vendre, du moins à court terme.
Les correctifs sont désormais en place, et les transactions Orchard sont de nouveau opérationnelles. Mais la question qui demeure — le bug a-t-il jamais été exploité ? — est une question à laquelle l'architecture de Zcash ne permettra peut-être jamais de répondre.




