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

Exploit de Poly Network

Un bug de contrat cross-chain a permis à un attaquant d'échanger la clé publique du keeper et retirer 611 M$ de trois chaînes — restitués en totalité.

Date
Statut
Récupéré

Le 10 août 2021, un attaquant a drainé environ 611 M$ en jetons du protocole cross-chain Poly Network sur Ethereum, BNB Chain et Polygon. En deux semaines, l'attaquant a restitué chaque centime et s'est vu offrir une prime de 500 K$ et un emploi.

Ce qui s'est passé

Poly Network utilisait une paire de contrats cross-chain — EthCrossChainManager et EthCrossChainData — pour relayer les messages entre les chaînes supportées. Le contrat relayeur avait une fonction publique (verifyHeaderAndExecuteTx) qui pouvait appeler des données arbitraires sur le contrat de données, y compris la fonction putCurEpochConPubKeyBytes du contrat de données qui définissait la clé publique du keeper.

En forgeant une preuve cross-chain qui se résolvait à cette fonction interne, l'attaquant a fait pivoter la clé publique du keeper vers une qu'il contrôlait. À partir de ce moment, chaque retrait cross-chain pouvait être signé par lui.

Conséquences

  • L'attaquant a initialement prétendu l'avoir fait « pour le plaisir » et a commencé à restituer les fonds en 24 heures, négociant publiquement avec Poly Network via des messages on-chain.
  • Tous les 611 M$ ont été restitués. Poly Network a publiquement offert à l'attaquant une prime de 500 K$ et le rôle de « Chief Security Advisor ».
  • L'exploit est devenu un exemple d'école de pourquoi les exécuteurs de messages cross-chain ne devraient pas pouvoir muter un état critique pour la confiance.

Pourquoi c'est important

Le bug de Poly Network n'était pas dans la cryptographie ou dans la signature du keeper — il était dans ce que l'exécuteur était autorisé à appeler. Tout pont cross-chain qui peut appeler des fonctions administratives sur sa propre configuration doit traiter l'exécuteur comme un appelant privilégié.

Sources & preuves on-chain

  1. [01]medium.comhttps://medium.com/@MrToph/the-initial-analysis-of-the-poly-network-hack-c4f8d3b69cb4
  2. [02]twitter.comhttps://twitter.com/PolyNetwork2/status/1425073987164381196
Transactions
  • 0xad7a2c70c958fcd3effbf374d0acf3774a9257577625ae4c838e24b0de17602a

Dépôts liés