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 № 004Bug de smart contract

Multisig Parity : Hack et Gel

Deux incidents en quatre mois : une faille initWallet publique a drainé 30 M$, puis un utilisateur a détruit la bibliothèque, gelant 150 M$+ sur 151 multi-sigs.

Date
Victime
Parity
Chaîne(s)
Statut
Fonds dérobés

En 2017, la bibliothèque portefeuille multi-sig Parity — utilisée comme contrat sous-jacent pour plusieurs des plus grands trésors d'Ethereum — a subi deux incidents catastrophiques distincts à quatre mois d'intervalle. L'impact combiné : environ 30 M$ volés et 150 M$+ supplémentaires gelés en permanence sans chemin on-chain vers la récupération.

Ce qui s'est passé

19 juillet 2017 — Le drain (~30 M$)

Le multi-sig Parity était un proxy mince qui appelait dans un contrat de bibliothèque partagé via delegatecall. La bibliothèque exposait une fonction initWallet qui, lorsqu'appelée sur un portefeuille, définissait les propriétaires du portefeuille. La fonction était appelable par n'importe qui, sur n'importe quel portefeuille, même après l'initialisation du portefeuille.

Un attaquant a parcouru Ethereum, appelant initWallet sur des portefeuilles Parity qu'il ne possédait pas — écrasant leurs propriétaires avec sa propre adresse — puis a retiré les soldes. Environ 150 000 ETH (~30 M$) ont été drainés de trois grands portefeuilles, dont ceux des ICO Edgeless Casino, Swarm City et æternity. Un groupe white-hat a devancé l'attaquant sur plusieurs autres portefeuilles et a sauvé environ 200 M$.

Parity a déployé un contrat de bibliothèque corrigé.

6 novembre 2017 — Le gel (~150 M$+)

La bibliothèque corrigée contenait encore un problème subtil : initWallet pouvait encore être appelé sur le contrat de bibliothèque lui-même, transformant la bibliothèque en un portefeuille multi-sig appartenant à l'appelant. Un utilisateur — devops199 sur GitHub — a fait exactement cela, réclamant accidentellement la propriété du contrat de bibliothèque, puis a appelé la fonction kill de la bibliothèque (un selfdestruct) pour « annuler » son erreur.

Selfdestruct a supprimé le bytecode de la bibliothèque de manière permanente. Chaque multi-sig Parity en existence dépendait du delegatecall dans cette bibliothèque pour fonctionner. Avec la bibliothèque partie, tous ces portefeuilles sont devenus des briques — ils pouvaient recevoir des ETH et des jetons, mais rien à l'intérieur ne pourrait jamais être retiré.

Environ 513 743 ETH (150 M$ à l'époque, plusieurs milliards aux prix de pointe) ont été gelés dans 151 portefeuilles, dont le trésor de l'ICO Polkadot (la même équipe Parity).

Conséquences

  • Parity a proposé EIP-999 pour récupérer les fonds gelés via un hard fork modifiant l'état. La communauté l'a rejeté ; Ethereum a choisi l'immuabilité plutôt que la restitution cette fois-ci, malgré avoir fait l'inverse pour The DAO dix-huit mois plus tôt.
  • Les fonds restent gelés sur le mainnet Ethereum à ce jour — un monument permanent au schéma de bibliothèque delegatecall.

Pourquoi c'est important

Parity a établi deux pratiques durables : ne jamais exposer de fonctions d'initialisation qui peuvent être réinvoquées, et ne pas mettre l'implémentation critique dans une bibliothèque partagée et destructible. L'équivalent moderne — les proxies modifiables UUPS — interdit explicitement selfdestruct dans le contrat d'implémentation pour exactement la raison que Parity a démontrée.

Le résultat asymétrique — DAO récupéré, Parity non — a également montré comment le consensus de la communauté sur les interventions d'urgence est fondamentalement arbitraire, et dépend de qui demande, de l'ampleur de la perte, et de la politique du moment.

Sources & preuves on-chain

  1. [01]openzeppelin.comhttps://www.openzeppelin.com/news/on-the-parity-wallet-multisig-hack-405a8c12e8f7
  2. [02]techcrunch.comhttps://techcrunch.com/2017/11/07/a-major-vulnerability-has-frozen-hundreds-of-millions-of-dollars-of-ethereum/
  3. [03]theregister.comhttps://www.theregister.com/2017/11/10/parity_280m_ethereum_wallet_lockdown_hack/

Dépôts liés