Drainage d'approbations Transit Swap
Les utilisateurs de Transit Swap avec approbations infinies ont perdu 21 M$ : claimTokens ne validait pas quel jeton appeler en transferFrom. 70 % rendus.
- Date
- Victime
- Transit Swap
- Statut
- Partiellement récupéré
Le 2 octobre 2022, l'agrégateur DEX cross-chain Transit Swap a été exploité pour environ 21 millions de dollars via une validation de paramètre manquante dans sa fonction claimTokens. L'attaquant a drainé les utilisateurs ayant accordé des approbations infinies de jetons au contrat de gestion des permissions de Transit. Après négociation on-chain, 70 % des fonds ont été retournés, classant l'événement comme une opération white-hat (très coûteuse).
Ce qui s'est passé
Pour utiliser Transit Swap, les utilisateurs accordaient des approbations de jetons au contrat de gestion des permissions du protocole, lui permettant de dépenser les jetons en leur nom durant les swaps. La fonction claimTokens du contrat était responsable d'effectuer l'appel transferFrom réel contre le solde approuvé de l'utilisateur.
La vulnérabilité : claimTokens acceptait l'adresse du contrat de jeton comme paramètre fourni par l'utilisateur et ne la validait contre aucune allowlist ou source attendue. La fonction appelait volontiers transferFrom sur n'importe quelle adresse de jeton que l'appelant spécifiait, contre tout utilisateur ayant approuvé Transit à dépenser ce jeton.
L'attaque :
- L'attaquant a énuméré les portefeuilles détenant des approbations infinies au contrat Transit Swap.
- Pour chaque victime, a appelé
claimTokensavec l'adresse de la victime comme source et l'adresse de l'attaquant comme destination. - Le contrat, manquant la validation, a exécuté le transfert.
- Drainé ~21 M$ à travers plusieurs jetons (USDT, USDC, BUSD, ETH, BNB, etc.).
Conséquences
- Transit Swap a mis en pause le contrat affecté et engagé l'attaquant via des messages on-chain.
- Après plusieurs jours de négociation, l'attaquant a retourné environ 70 % des fonds volés à une adresse de récupération.
- L'équipe a redistribué les fonds récupérés aux utilisateurs affectés au prorata.
- Transit a subi un second exploit plus petit quelques mois plus tard sous des conditions différentes.
Pourquoi c'est important
Transit Swap fait partie d'une longue lignée de bugs de drainage d'approbations sur agrégateurs DEX — les protocoles qui détiennent des approbations utilisateurs doivent valider rigoureusement chaque paramètre qui détermine comment ces approbations sont dépensées. Le pattern récidive chez :
- Furucombo (2021) —
delegatecallvers cible contrôlée par l'attaquant. - Sushi RouteProcessor2 (2023) — contrôle d'accès manquant à l'intérieur du swap.
- LI.FI (2024) — validation de facette manquante dans un déploiement frais.
- Transit Swap (2022) —
claimTokensacceptant une source choisie par l'attaquant.
Dans chaque cas, les propres contrats du protocole fonctionnent techniquement comme conçus ; le bug est que les utilisateurs ont accordé des approbations en s'attendant à ce que le protocole contraigne comment ces approbations seraient exercées, et la logique de contrainte du protocole avait une faille. La réponse défensive — approbations bornées, permits EIP-2612, et gating par signature par transaction — devient standard mais accuse un retard sur le rythme auquel les agrégateurs basés sur approbations livrent du nouveau code.
Sources & preuves on-chain
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-transit-swap-hack-october-2022
- [02]theblock.cohttps://www.theblock.co/post/174307/hacker-returns-70-of-21-million-taken-from-transit-swap-dex
- [03]blog.solidityscan.comhttps://blog.solidityscan.com/transit-swap-hack-analysis-13c1e04e7de0/