Aller au contenu
Fondé MMXXVIVol. VI · № 273RSS
Blockchain Breaches

Archive des incidents de sécurité dans les cryptomonnaies — piratages, exploits, défaillances de ponts et rug pulls, documentés avec des preuves on-chain.

Dossier № 100Exploit de pont

Vidage du pont Nomad

Une mise à niveau de routine a marqué le hash zéro comme racine valide, transformant chaque message Nomad en un retrait que n'importe qui pouvait copier-coller.

Date
Victime
Nomad
Statut
Partiellement récupéré

Le 1er août 2022, le pont Nomad a été drainé d'environ 190 M$ dans ce qui est immédiatement devenu connu comme le premier « piratage décentralisé » — une fois l'exploit public, des centaines d'adresses se sont jointes en copiant-collant la transaction originale et en changeant le destinataire.

Ce qui s'est passé

Le contrat Replica de Nomad vérifiait qu'une racine Merkle de message avait été précédemment acceptée avant d'autoriser un retrait. Une mise à niveau de routine a initialisé le contrat avec un committedRoot de 0x00 — mais le chemin de code qui vérifiait les racines acceptées traitait la valeur zéro comme « déjà accepté » plutôt que « non initialisé ».

Le résultat : tout message dont la racine Merkle se résolvait à 0x00 après hachage était valide. En manipulant les feuilles, un attaquant pouvait forger un message qui retirait des jetons arbitraires. L'attaquant original a utilisé cela pour drainer du WBTC.

La transaction était suffisamment simple pour que quiconque la voyant sur Etherscan puisse changer l'adresse du destinataire dans le calldata et la renvoyer, retirant le lot de jetons suivant disponible. Des centaines d'adresses l'ont fait au cours des heures suivantes.

Conséquences

  • Nomad a demandé à tous les participants de restituer les fonds à une adresse de récupération. Une fraction significative a été restituée — en particulier par les adresses qui s'étaient clairement jointes opportunistement.
  • Le pont a été reconstruit avec une validation de racine appropriée et a continué à fonctionner à capacité réduite.

Pourquoi c'est important

Nomad est l'exemple canonique d'un bug d'un caractère (0 versus nonzero dans un seul conditionnel) produisant des pertes catastrophiques. Il a également démontré comment, dans un mempool ouvert, un exploit qui ne nécessite pas de sophistication se propagera à des milliers de participants non liés en quelques minutes.

Sources & preuves on-chain

  1. [01]medium.comhttps://medium.com/nomad-xyz-blog/nomad-bridge-incident-update-aug-1-2022-66e85b3bf4f0
  2. [02]halborn.comhttps://www.halborn.com/blog/post/the-nomad-bridge-hack-a-deeper-dive

Dépôts liés