Le portefeuille chaud de Binance a été piraté pour 6,28 milliards USD ; le suivi on-chain révèle comment l'attaquant a utilisé l'autorisation EIP-7702 pour prendre le contrôle du portefeuille et déplacer les fonds avant que Tether et d'autres émetteurs puissent les geler, fournissant une reconstruction complète de cet incident de sécurité le plus important.
Auteur : Dickson (@DicksonWuML)
Compilé par : Shenchao TechFlow
Introduction de Shenchao : Le vol des portefeuilles chauds de Binance est l'événement le plus marquant du marché crypto aujourd'hui. Dickson, ingénieur chez CertiK et membre de SEAL, a retracé les enregistrements on-chain transaction par transaction, reconstituant l'intégralité du processus : la préparation des fonds par l'attaquant via des retraits depuis Tornado Cash, la prise de contrôle des portefeuilles chauds Ethereum de Binance au moyen de l'autorisation EIP-7702, et la course contre Tether, Circle et d'autres émetteurs pour geler les fonds. Les montants et horaires indiqués dans cet article sont des statistiques on-chain arrêtées à l'heure de publication de l'auteur (vers 8 h du matin, heure de Pékin, le 30 octobre), les heures étant en UTC (+8 heures = heure de Pékin), et n'ont pas encore été officiellement confirmés par Binance.
Les portefeuilles chauds de Binance ont perdu environ 6,28 milliards de dollars sur 8 chaînes aujourd'hui. Sur ce total, 6,07 milliards de dollars ont été transférés au cours des 55 premières minutes, après quoi l'attaquant a balayé à plusieurs reprises l'un des portefeuilles Ethereum pendant plus de deux heures.
Depuis, Tether, Circle, Ripple, Paxos, World Liberty et Binance ont gelé environ 2,80 milliards de dollars. Environ 3,27 milliards de dollars peuvent encore être déplacés librement, principalement du BTC et de l'ETH.
J'ai retracé l'intégralité de l'incident on-chain, y compris la manière dont l'attaquant a déplacé les fonds avant les gels 🧵
Répartition des 6,28 milliards de dollars (valorisés à 20:24 UTC) :
• Ethereum 3,74 milliards de dollars
• Bitcoin 18 270,2 BTC, 1,47 milliard de dollars
• Tron 612,7 millions de dollars en USDT + 46,4 millions de TRX, 627,5 millions de dollars
• XRP 233,5 millions de XRP, 296,5 millions de dollars
• Solana 970 522 SOL, 96,1 millions de dollars
• Arbitrum 8 426 ETH + 74,6 millions d'ARB, 31,8 millions de dollars
• Avalanche 1,81 million d'AVAX + 8,41 millions d'USDt, 24,3 millions de dollars
• Optimism 44,2 millions d'OP, 4,8 millions de dollars
Les 3,74 milliards de dollars sur Ethereum sont sortis en cinq lots :
• 20:24:23, un unique sweep() sur Binance 14 : 167 464,25 ETH, 1,615 milliard de dollars en USDT et 61 autres jetons, pour un total de 2,53 milliards de dollars
• 20:41 et 20:59, 780 millions + 43 millions d'USDC transférés depuis un portefeuille intelligent Binance qui faisait confiance à Binance 14, pour un total de 822,6 millions de dollars
• 20:24:47, Binance 16 a signé 9 transferts envoyés directement à l'attaquant : 28 005,6 ETH, 55,7 millions d'USDT, 25,9 millions de RLUSD, 84,5 WBTC, 820 000 UNI, 1 199 XAUt, 18,8 millions d'ENA, 304 600 LINK, 583,6 milliards de PEPE, pour un total de 174,2 millions de dollars
• 21:04 et 21:44, deux sweeps supplémentaires de Binance 14 : 2 070 ETH et 204,3 millions d'USDT, pour un total de 209,6 millions de dollars
• 22:39, un sweep final vers un nouveau portefeuille : 128,5 ETH et 122 jetons à petite capitalisation, environ 500 000 dollars
Par actif : 1,87 milliard de dollars en USDT, 823 millions de dollars en USDC, 457 millions de dollars en ETH (197 668 ETH), 88,5 millions de dollars en RLUSD, 76,8 millions de dollars en wBETH, 50,5 millions de dollars en XAUt, 49,6 millions de dollars en UNI, 44,7 millions de dollars en ENA, 40,1 millions de dollars en PEPE, 29,6 millions de dollars en LINK, 27,8 millions de dollars en USD1, plus environ 50 jetons de moindre importance.La préparation a commencé la veille. Le 28 octobre à 07:39 UTC, le portefeuille principal de l'attaquant 0x7c8601d4645b93cea45f71e118a729332e6b5ca0 a d'abord retiré 0,1 ETH de Tornado Cash, puis effectué deux autres retraits. Un second portefeuille a ensuite retiré 1 ETH de Tornado et l'a transféré au portefeuille principal le 29 octobre à 18:20.
Le 29 octobre à 02:28, ils ont déployé un contrat sweeper. De 13:51 à 16:47, ils se sont entraînés sur leurs propres portefeuilles : en utilisant la délégation EIP-7702, en balayant des USDT et USDC de test, puis en les retirant. À 15:59, ils ont déployé une version v2 avec une fonction d'appel générique, et c'est cette fonction qui a ensuite déplacé les 823 millions de dollars d'USDC.
À 20:04:52 UTC, la première étape a échoué. Le portefeuille XRP de Binance a envoyé 42 750 000,1 RLUSD à l'attaquant, mais le compte XRP de l'attaquant n'existait pas encore, donc le transfert a été renvoyé.
Huit secondes plus tard, 185 017 485,5 XRP ont été transférés avec succès, créant ainsi le compte. À 20:09, quatre autres portefeuilles XRP de Binance avaient également été vidés.
Une réaction en chaîne a suivi :
20:10 Solana, 965 455,1 SOL déplacés en une seule transaction
20:18 Optimism, 44,2 millions d'OP
20:20 Bitcoin, 18 270,2 BTC déplacés en 11 transactions et répartis en blocs de 1 000 BTC dans le même bloc
20:20 à 20:22 Tron, 612,7 millions de dollars d'USDT + 46,4 millions de TRX
20:30 à 20:35 Arbitrum et Avalanche
Ethereum a révélé la méthode d'attaque. À 20:20:59, l'attaquant a envoyé une transaction portant 50 autorisations EIP-7702, toutes signées par la clé privée de Binance 14, correspondant aux nonces 18 914 775 à 18 914 824.
Binance 14 lui-même venait d'utiliser 18 914 775 à 20:17:47, ce qui indique que ces autorisations ont été signées seulement quelques minutes avant leur utilisation.
L'autorisation avec le nonce 18 914 809 correspondait. La propre transaction de Binance 14 dans le même bloc utilisait 18 914 808, et à partir de ce moment, Binance 14 exécutait le code de l'attaquant.
À 20:24:23, un seul sweep() a déplacé 167 464 ETH et 1,615 milliard de dollars d'USDT hors de celui-ci. Vingt-quatre secondes plus tard, Binance 16 a signé 9 transferts envoyés directement à l'attaquant. À 20:41 et 20:59, l'attaquant a utilisé Binance 14 pour transférer 823 millions de dollars d'USDC hors d'un portefeuille intelligent Binance qui lui faisait confiance.
Vint ensuite la course contre les gels. L'attaquant a rapidement fractionné les USDT :
• À 20:30, 500 millions de dollars d'USDT ont été transférés à 0x9749…c762. À 20:59, 325 millions de dollars avaient été échangés contre de l'ETH via des teneurs de marché RFQ, et les 175 millions de dollars restants ont été transférés plus loin
• À 20:33, 200 millions de dollars d'USDT ont été transférés à 0x0ddf…697e. Environ 10 millions de dollars ont été vendus sur des DEX, et 190 millions de dollars ont été transférés à 0x8d53…639a, qui a déposé 60 millions de dollars dans Aave et emprunté de l'ETH en garantie
La première série de mises sur liste noire de Tether a pris effet à 21:01:35 : 0x5227, qui détenait encore 971 millions de dollars d'USDT ; et 0x9749, qui avait déjà été vidé. Circle a gelé les 823 millions de dollars d'USDC à 21:04:59.
Certains fonds se sont échappés dans les dernières secondes :• À 21:01:59, 0x8d53 a transféré 130 millions de dollars USDT à 0x77ed…c3eb. Quarante-huit secondes plus tard, à 21:02:47, Tether a gelé 0x8d53• De 21:04 à 21:06, 0x77ed a vendu environ 50 millions USDT sur un DEX et transféré 80 millions à 0x7aa4…bfd1
• De 21:08 à 21:11, 0x7aa4 a vendu environ 50 millions supplémentaires et déplacé les 30 millions restants. Au moment où Tether a gelé 0x7aa4 à 21:12:35, il avait déjà été vidé
• À 21:16:11, 0xccbe…a263 a transféré les 30 millions. 36 secondes plus tard, Tether a gelé 0xccbe, et à 21:18:59, il a intercepté les 30 millions à 0xb171…c8c3
• Les 175 millions transférés par 0x9749 sont restés à 0xaa24…54a0 jusqu'à ce que Tether le gèle à 21:14:59
Au total, sur les 1,875 milliard USDT sur Ethereum, environ 435 millions ont été vendus avant que la liste noire ne rattrape le coup. 1,38 milliard a été gelé, et 60 millions sont bloqués comme collatéral Aave.
Actions d'autres émetteurs, par ordre chronologique :
• 20:57:47 World Liberty a mis sur liste noire 48,5 millions WLFI dans 0x5227
• 21:07:55 Tether a gelé 8,41 millions USDt sur Avalanche. L'attaquant a tenté de les déplacer à 21:40:47, et la transaction a été annulée
• De 21:09 à 21:21 Tether a gelé 378,7 millions USDT dans trois portefeuilles sur Tron. Auparavant, 234 millions avaient déjà été échangés en TRX via SunSwap
• 21:11:23 Tether a gelé 12 574 XAUt (environ 50 millions USD)
• 22:00:59 Ripple a gelé RLUSD. L'attaquant l'avait déjà déplacé vers 0xe702…958d à 21:33 et vendu 48 millions en ETH, le dernier ordre de vente et le gel tombant dans le même bloc. 40,5 millions ont été interceptés
• 22:10:35 World Liberty a gelé 27,8 millions USD1
• 22:30:47 Paxos a gelé 1 907 PAXG
• 22:48:35 Binance a mis sur liste noire 29 934 wBETH (environ 75 millions USD) ; l'attaquant l'avait déjà déplacé vers 0x7f9d…15e3 à 21:52
Les 3,45 millions FDUSD de First Digital sont toujours transférables.
Binance 14 est resté délégué au contrat de l'attaquant, ce qui a donné lieu à un bras de fer :
• À 21:04 et 21:44, l'attaquant a de nouveau balayé : d'abord 1 700 ETH, puis 370 ETH et 200,4 millions USDT. Ces USDT ont atterri dans 0x5227, qui avait déjà été gelé par Tether
• À 22:06:23, Tether a mis sur liste noire Binance 14 lui-même. Les transferts USDT de Binance depuis cette adresse ont échoué à 22:15 et 23:01
• À 22:39, l'attaquant a de nouveau balayé, cette fois vers un nouveau portefeuille : 128,5 ETH et 122 jetons à petite capitalisation
• De 22:55 à 23:07, Binance a vidé Binance 14 : 46 transferts de jetons vers Binance 8, environ un toutes les 12 secondes
• De 23:36 à 23:38, l'attaquant a appelé sweep() quatre fois de plus, et les quatre sont revenues vides
Hors Ethereum :
• Arbitrum, de 21:35 à 21:38 : les 8 426 ETH et 74,6 millions ARB ont été déplacés vers un nouveau portefeuille 7702 0x3e2b…32d5, qui a autorisé ARB pour le trading à 21:41. À 23:50, ils y étaient toujours
• Avalanche, 21:45:34 : 1 813 999 AVAX ont été déplacés vers 0x8035…c397. Ensuite, 200 005 AVAX ont été transférés depuis 0xc39e…9824, et à 23:27:35 la même adresse a reçu 1 563 812,78 USDC sur Ethereum via le pont inter-chaînes CCTP de Circle. Quatre minutes plus tard, à 23:31:59, Circle l'a mise sur liste noire• Les fonds sur Bitcoin, XRP, Solana et Optimism n'ont pas encore bougé. Les BTC sont répartis sur 19 portefeuilles, dont 17 contiennent chacun exactement 1 000 BTC
Situation à environ 23h50 UTC :
Gelé, environ 2,80 milliards USD
• 1,38 milliard USDT sur Ethereum, 378,7 millions sur Tron, 8,41 millions sur Avalanche (Tether)
• 824,6 millions USDC (Circle)
• 40,5 millions RLUSD (Ripple), 27,8 millions USD1 (World Liberty), 12 574 XAUt (Tether), 29 934 wBETH (Binance), 1 907 PAXG (Paxos), 48,5 millions WLFI
Non gelé, environ 3,27 milliards USD
• 18 270 BTC, 1,42 milliard USD
• 458 770 ETH répartis sur 9 portefeuilles, 1,03 milliard USD
• 233,5 millions XRP, 289 millions USD
• 684,6 millions TRX, 243 millions USD
• Environ 136 millions USD en autres jetons sur Ethereum
• 970 500 SOL, 93 millions USD, plus ARB, AVAX et OP, environ 48 millions USD
Autres 60 millions USDT bloqués comme collatéral Aave.
Remarque : Les transferts sur BTC, XRP et Tron ont été liés par le timing et les empreintes de transaction : la même fenêtre temporelle, des adresses de réception toutes nouvelles, et des frais et formats de transaction différents des retraits propres à Binance. Le montant volé est calculé aux prix de 20h24 UTC ; les avoirs actuels sont calculés aux prix d'environ 23h50 UTC.
Les preuves on-chain pour chaque transaction et gel sont jointes dans le post ci-dessous. Si vous remarquez quelque chose que j'ai manqué, veuillez me le faire savoir !