Le 17 février 2023, l'application de trading Dexible a perdu environ 2 millions de dollars lorsqu'un attaquant a exploité la fonction selfSwap, qui effectuait un appel externe arbitraire en utilisant l'adresse du routeur et les calldata fournis par l'utilisateur sans validation. L'attaquant l'a pointée vers des contrats de tokens et a appelé transferFrom contre chaque wallet détenant des approvals Dexible.
Ce qui s'est passé
selfSwap était conçue pour router des trades via un routeur DEX arbitraire fourni par l'appelant. Elle ne restreignait ni la cible ni les calldata. L'attaquant l'a invoquée avec target = un contrat de token et calldata = transferFrom(victime, attaquant, solde), drainant environ 2 M$ depuis les wallets ayant accordé des approvals sur Ethereum et Arbitrum.
Conséquences
- Dexible a suspendu le contrat et exhorté les utilisateurs à révoquer leurs approvals.
- L'équipe a publié un post-mortem ; une mitigation partielle a suivi.
Pourquoi c'est important
Dexible est l'une des instances les plus pures de l'anti-pattern « appel externe arbitraire avec cible contrôlée par l'appelant » — structurellement identique à Furucombo, Transit Swap et LI.FI. Tout contrat détenant des approvals qui laisse l'appelant spécifier quel contrat appeler et avec quelles données est un drainage universel des wallets de ses utilisateurs. La règle est absolue et constamment violée : ne jamais faire d'appel externe non validé depuis un contrat qui détient des approvals utilisateurs. L'UX d'agrégateur veut un routage flexible ; la sécurité exige une allowlist. Le catalogue montre ce compromis exact perdu, de la même façon, année après année.
Sources & preuves on-chain
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-dexible-hack-february-2023
- [02]blockapex.iohttps://blockapex.io/dexible-hack-analysis/
- [03]rekt.newshttps://rekt.news/dexible-rekt