Réentrance de swap d'Orion Protocol
3 M$ drainés d'Orion sur Ethereum/BSC : doSwapThroughOrionPool acceptait des chemins non validés sans garde de réentrance ; un faux jeton a inflé les soldes.
- Date
- Victime
- Orion Protocol
- Statut
- Fonds dérobés
Le 2 février 2023, le protocole de trading décentralisé Orion Protocol a été exploité pour environ 3 millions de dollars — 2,84 M$ sur Ethereum et 191 K$ sur BSC. La fonction doSwapThroughOrionPool acceptait un chemin de swap fourni par l'utilisateur sans valider les jetons et sans protection contre la réentrance, permettant à l'attaquant d'insérer un faux jeton dont le callback de transfert réintroduisait la logique de dépôt.
Ce qui s'est passé
Le doSwapThroughOrionPool d'Orion permettait aux utilisateurs d'exécuter des swaps via un chemin d'adresses de jetons fourni par l'appelant. Deux omissions se sont combinées fatalement :
- Aucune validation de jeton — la fonction acceptait toutes les adresses de jetons dans le chemin, y compris les contrats déployés par l'attaquant.
- Aucune garde de réentrance — le swap pouvait être réintroduit pendant que sa comptabilité était incomplète.
L'attaque :
- Déploiement d'un faux jeton
ATKvia un contrat auto-destructeur, avec un callbacktransfermalveillant. - Prise d'un swap flash de ~2,84 M$ USDT depuis une paire Uniswap V2.
- Appel à
doSwapThroughOrionPoolavec un chemin incluant le faux jeton ATK. - Lorsque la logique de swap d'Orion a invoqué le transfert d'ATK, le callback a réintroduit la fonction de dépôt d'Orion avant que la comptabilité du swap original ne soit réglée — créditant le solde interne de l'attaquant sans fonds réels l'adossant.
- Retrait du solde gonflé en tant qu'actifs réels, remboursement du swap flash, et blanchiment d'environ 1 100 ETH via Tornado Cash.
Conséquences
- Orion Protocol a mis en pause les fonctions affectées et remboursé les utilisateurs affectés depuis les réserves du protocole ; l'équipe a déclaré que tous les fonds des utilisateurs seraient récupérés.
- L'équipe a attribué le problème en partie à une dépendance de bibliothèque tierce dans le chemin de swap, bien que la garde de réentrance manquante soit propre à Orion.
- Le protocole a ensuite été renommé Lumia.
Pourquoi c'est important
Orion Protocol est une entrée de plus dans la lignée « chemin de swap non validé + garde de réentrance manquante » qui traverse BurgerSwap (2021), Transit Swap (2022), et Exactly Protocol (2023). La forme récurrente :
- Une fonction de routage/swap accepte des adresses de jetons fournies par l'appelant.
- La fonction effectue des appels externes vers ces jetons (transferts).
- Ces appels externes peuvent réintroduire le protocole parce que la fonction manque d'une garde de réentrance.
- Un attaquant fournit un jeton malveillant dont le callback de transfert exploite la réentrance.
La réponse défensive consiste en deux primitives bien documentées appliquées ensemble : valider chaque adresse de jeton/contrat contre une liste d'autorisation ET appliquer une garde de réentrance à chaque chemin modifiant l'état qui effectue des appels externes. L'une ou l'autre seule est insuffisante ; Orion n'avait ni l'une ni l'autre sur le chemin exploité.
La fréquence à laquelle ce bug composé exact se répète — à travers les années, les chaînes et les équipes — est l'une des démonstrations les plus claires du catalogue que les connaissances de sécurité DeFi ne se propagent pas automatiquement. Chaque nouveau contrat de routage/agrégation est une opportunité fraîche d'omettre l'une ou les deux primitives, et l'omission continue d'être faite parce que le code de routage est complexe, est livré rapidement et est souvent moins rigoureusement audité que la logique de pool de base.
Sources & preuves on-chain
- [01]coindesk.comhttps://www.coindesk.com/business/2023/02/02/orion-protocol-loses-3m-of-crypto-in-trading-pool-exploit
- [02]blog.solidityscan.comhttps://blog.solidityscan.com/orion-protocol-hack-analysis-missing-reentrancy-protection-f9af6995acb3
- [03]medium.comhttps://medium.com/neptune-mutual/taking-a-closer-look-at-orion-protocol-hack-9631e4858692