Bug de précision KyberSwap Elastic
54,7 M$ drainés de KyberSwap Elastic après qu'une erreur d'arrondi en liquidité concentrée a trompé les pools en reconnaissant le double de liquidité.
- Date
- Victime
- KyberSwap
- Statut
- Fonds dérobés
- Attribution
- Andean Medjedovic (indicted)
Le 22 novembre 2023, l'exchange décentralisé KyberSwap Elastic a été drainé d'environ 54,7 millions de dollars sur cinq chaînes. L'exploit a chaîné un biais d'arrondi subtil et une faille de séquençage de mise à jour de tick pour convaincre l'AMM que les pools détenaient deux fois plus de liquidité qu'ils n'en avaient réellement.
Ce qui s'est passé
KyberSwap Elastic était un AMM de liquidité concentrée de style Uniswap v3. Les fournisseurs de liquidité déposaient des actifs dans des plages de prix spécifiques (« ticks »), et la comptabilité du pool suivait quels ticks étaient actifs et combien de liquidité était concentrée dans chacun.
L'exploit résidait dans l'interaction entre la fonction de swap et la logique de mise à jour des ticks. Spécifiquement :
- L'attaquant a construit un swap dont le montant d'entrée calculé tombait juste au-dessus de la frontière d'un tick contenant sa propre liquidité (soigneusement placée).
- En raison de la direction d'arrondi dans la math de swap, le protocole a conclu que le swap avait traversé la frontière du tick — et a déclenché la logique de mise à jour de tick qui ajoute la liquidité du tick suivant au total actif.
- Mais le protocole avait aussi conclu que le tick actuel avait encore assez de liquidité pour satisfaire le swap — donc il n'a jamais mis à jour l'état du tick précédemment traversé.
- Le résultat : la liquidité dans le tick de l'attaquant a été comptée deux fois — une fois comme toujours active dans la plage courante, et à nouveau comme ajoutée à la plage suivante.
En répétant cette manœuvre à grande échelle sur plusieurs pools, l'attaquant a retiré bien plus de chaque pool qu'il n'y avait jamais déposé.
Conséquences
- L'attaquant a drainé 2 367 fournisseurs de liquidité uniques pour une prise primaire de ~48,7 M$, avec ~6,6 M$ supplémentaires raflés par des bots copycat en quelques heures.
- Les procureurs fédéraux américains ont inculpé Andean Medjedovic, un Canadien de 22 ans, pour l'exploit — alléguant que les actions on-chain constituaient une fraude sur matières premières.
- KyberSwap a publié un post-mortem détaillé, arrêté Elastic et concentré l'ingénierie restante sur KyberSwap Classic.
Pourquoi c'est important
KyberSwap fait partie d'un petit ensemble d'incidents — aux côtés de Cetus et Balancer v2 — qui montrent que la math d'invariant AMM est toujours une frontière dans le code de production. La même classe de bug erreur-de-précision / direction-d'arrondi / ordre-de-mise-à-jour-d'état continue de réapparaître dans différents designs d'AMM à différentes échelles. La défense est invariablement tests d'invariants, fuzzing et vérification formelle — et même cela n'est pas infaillible.
Sources & preuves on-chain
- [01]blog.kyberswap.comhttps://blog.kyberswap.com/post-mortem-kyberswap-elastic-exploit/
- [02]halborn.comhttps://www.halborn.com/blog/post/explained-the-kyberswap-hack-november-2023
- [03]slowmist.medium.comhttps://slowmist.medium.com/a-deep-dive-into-the-kyberswap-hack-3e13f3305d3a