Une incohérence entre les soldes et l’offre totale
Entre le 24 et le 26 octobre, un programme XCM malveillant a utilisé l’instruction WithdrawAsset. Lorsqu’il échouait, les débits des comptes étaient annulés, mais la baisse de l’offre totale enregistrée de dotUSD persistait. Répéter la séquence a donc réduit l’offre comptable sans modifier les soldes détenus par les utilisateurs.
Comment le prix du pool a été déformé
Le DEX de l’Asset Hub plafonnait la quantité de dotUSD disponible au plus petit montant entre le solde du pool et l’offre enregistrée. Une fois l’offre artificiellement passée sous le solde réel, cette hypothèse a cassé. Le dotUSD s’est trouvé surévalué dans le pool, permettant de l’échanger contre davantage de DOT.
| Étape | Effet |
|---|---|
| Échec d’un programme XCM | Débit du compte annulé |
| Erreur de comptabilisation | Baisse d’offre dotUSD conservée |
| Répétition | Offre affichée inférieure aux soldes réels |
| Calcul du DEX | Prix artificiellement élevé du dotUSD |
| Arbitrage | Sortie de DOT aux dépens de la trésorerie |
Une perte publique, pas une perte des utilisateurs
Cryptoast estime à 1,38 million de dollars la valeur des DOT retirés du pool, dont la trésorerie était l’unique fournisseur de liquidité. Parity affirme que les soldes utilisateurs n’ont pas changé et que le module de stabilité a maintenu la conversion de dotUSD contre USDT au ratio de 1 pour 1.
Les preuves onchain ne permettent pas d’affirmer que l’auteur de l’exploitation XCM et celui qui a réalisé l’arbitrage sont la même personne. Cette distinction reste donc non vérifiée.
Un correctif connu mais non encore déployé
La vulnérabilité avait été signalée dans le programme de bug bounty en juin et corrigée dans le code. Classée de sévérité moyenne avant le lancement de dotUSD, elle n’avait pas été intégrée à la version stable alors en production. Parity estime qu’un commentaire public du chercheur, depuis supprimé, a pu donner aux attaquants suffisamment de contexte.
La réponse technique et les enseignements
Snowfork a d’abord interrompu ses propres relais, ralentissant les messages entrants. L’attaquant a ensuite utilisé son propre relais. Le runtime 2.5.1 a appliqué le correctif environ six heures après cette reprise, puis la version 2.5.2 a rétabli l’offre enregistrée à partir des soldes sans modifier les comptes. Parity annonce une réévaluation plus fréquente des vulnérabilités, un déploiement accéléré des correctifs et une meilleure surveillance des variations d’émission.

