Le 6 octobre 2022, un attaquant a exploité le BSC Token Hub — le pont inter-chaînes natif entre Binance Beacon Chain et BNB Smart Chain — pour frapper 2 000 000 BNB (~586 M$ à l'époque) directement vers son adresse.
Ce qui s'est passé
Le pont vérifiait les preuves de retrait inter-chaînes en validant une preuve d'inclusion Merkle contre une racine de header de bloc connue. La bibliothèque qu'il utilisait (IAVL de Cosmos) acceptait des preuves incluant des données de feuille additionnelles non vérifiées, permettant à l'attaquant de construire une preuve qui se validait pour un payload qu'il a forgé — même si ce payload n'avait jamais fait partie d'un vrai bloc Beacon Chain.
L'attaquant a soumis deux preuves forgées qui ont chacune frappé 1 M de BNB vers son adresse sur BSC, puis a immédiatement commencé à ponter les actifs vers Ethereum et Avalanche via les routes inter-chaînes standards.
Conséquences
- Les validateurs BNB Chain ont mis en pause la chaîne en quelques heures, avant que la plupart des fonds ne puissent être déplacés via d'autres ponts. Environ 100-110 M$ avaient déjà quitté ; le reste a été gelé on-chain.
- Binance a indemnisé les protocoles affectés et poussé un patch hard-fork d'urgence.
- Le pont a subi une refonte, incluant une validation de preuve plus stricte et un disjoncteur automatisé sur les retraits hors normes.
Pourquoi c'est important
La réponse de BNB — mettre la chaîne en pause — n'était possible que parce que BSC est permissionnée au niveau des validateurs. Pour la plupart des chaînes publiques, un bug équivalent aurait abouti à la sortie complète des 586 M$. L'incident a piloté l'adoption à l'échelle de l'industrie de limites de taux de retrait et d'un durcissement de la validation de preuves pour les ponts.
Sources & preuves on-chain
- [01]bnbchain.orghttps://www.bnbchain.org/en/blog/bnb-chain-ecosystem-update
- [02]numencyber.medium.comhttps://numencyber.medium.com/in-depth-analysis-of-the-bnb-chain-cross-chain-bridge-incident-2a4f5b3c3f0f
- 0xebf0bf25e5d8fae0e92ee3a8d6e5e2d6c1f8f1b9b8b0e7f3e2c9a5d8e7c4b2a1