Les 14 et 18 février 2020, le protocole de prêt bZx a subi les deux premières attaques par prêt flash jamais enregistrées sur le mainnet Ethereum. Les pertes combinées étaient modestes — environ 954 000 dollars — mais les attaques ont introduit une nouvelle classe d'exploit qui a depuis représenté des milliards en pertes.
Ce qui s'est passé
Les prêts flash avaient été lancés par Aave environ un mois plus tôt. Ils permettent à un utilisateur d'emprunter n'importe quel montant d'un token sans collatéral, à condition qu'il soit remboursé dans la même transaction. L'attaquant de bZx a réalisé que cette primitive pouvait financer le capital temporaire requis pour manipuler les prix on-chain.
Attaque 1 — 14 février (~350 K$ / 1 193 ETH)
L'équipe bZx était sur scène à ETHDenver quand le premier exploit a été déclenché :
- Emprunt flash d'ETH depuis un contrat de marge sur la plateforme Fulcrum de bZx.
- Emprunt de WBTC sur bZx contre une position délibérément sous-collatéralisée (un bug séparé de bZx l'a permis).
- Vente du WBTC emprunté sur le pool Uniswap WBTC/ETH, poussant le prix du WBTC fortement à la baisse.
- Rachat du WBTC au prix déprimé sur Kyber (qui lisait le prix Uniswap manipulé comme son oracle).
- Remboursement du prêt flash, partant avec le profit du différentiel de prix.
Attaque 2 — 18 février (~600 K$ / 2 378 ETH)
Quatre jours plus tard, un attaquant séparé a exploité le même schéma d'oracle en utilisant sUSD comme levier de manipulation — pompant le prix reporté de sUSD contre ETH via des achats financés par prêt flash, puis empruntant massivement contre le collatéral gonflé.
Conséquences
- bZx a mis en pause les deux contrats attaqués et corrigé les bugs spécifiques de dépendance à l'oracle et de sous-collatéralisation.
- Les deux pertes ont finalement été absorbées par le protocole depuis les réserves.
- bZx a subi un troisième incident majeur en novembre 2021 — une compromission de clé privée qui a drainé environ 55 M$ — et a effectivement fermé son produit de prêt après.
Pourquoi c'est important
bZx est l'incident fondateur de la catégorie attaque par prêt flash. Chaque exploit par prêt flash depuis — Beanstalk, Cream Finance, Cetus, d'innombrables incidents plus petits — est un descendant du même schéma : acquérir temporairement du capital massif → manipuler un oracle de prix on-chain → extraire de la valeur contre la lecture manipulée → rembourser le prêt.
Les réponses défensives — oracles pondérés dans le temps, flux de prix découplés, maintenance d'invariant résistante aux prêts flash — sont toutes des conséquences de la paire bZx.
Sources & preuves on-chain
- [01]coindesk.comhttps://www.coindesk.com/tech/2020/02/19/everything-you-ever-wanted-to-know-about-the-defi-flash-loan-attack
- [02]coindesk.comhttps://www.coindesk.com/markets/2020/02/18/defi-project-bzx-exploited-for-second-time-in-a-week-loses-630k-in-ether
- [03]quantstamp.comhttps://quantstamp.com/blog/market-dynamics-of-the-1st-bzx-hack-part-1