En voyant le patron de onekey défendre ses droits, avec des pertes de plusieurs millions d'actifs, je me suis rendu compte que le Defi est vraiment trop fragile. Après avoir fait le tour, il semble que personne n'explique clairement comment le hacker a attaqué, alors j'ai fait un peu de recherche et je partage avec vous :
Le protagoniste de l'histoire est ResupplyPair, où les utilisateurs peuvent emprunter en mettant en gage des actifs. Le modificateur isSolvent dans le contrat est responsable de vérifier si l'utilisateur est éligible pour emprunter les actifs demandés, la logique de code spécifique est :
On peut voir à la ligne 282 le calcul de l'ltv, si nous avons un moyen de mettre _exchangeRate à 0, alors la vérification serait toujours vraie ? Continuons à lire le code :
On peut voir que cette valeur provient de l'appel à l'oracle getPrices, et c'est le dénominateur, en d'autres termes, nous devons faire en sorte que le prix du collateral soit extrêmement élevé.
En lisant le code de l'oracle, on peut savoir que getPrices n'est qu'un relais, en réalité, il appelle l'interface convertToAssets de cet actif mis en gage (c'est-à-dire le coffre). Continuons à lire le code :
On peut voir que ce résultat est composé de calculs mathématiques très complexes, ici le hacker a amplifié le numérateur, et plus loin le total_assets, pour réaliser l'attaque. En vérifiant l'implémentation de la fonction _total_assets, on peut découvrir :
Cette valeur est liée au borrowed_token détenu par le contrat controller de ce coffre, c'est-à-dire crvUSD.
À ce stade de l'analyse, c'est en fait clair, ResupplyPair a été créé en utilisant un coffre vide, le hacker a transféré une certaine quantité de borrowed_token au contrat controller du coffre, ce qui a finalement fait que _exchangeRate est tombé à zéro, permettant ainsi à ses actifs mis en gage de voir leur valeur multipliée à l'infini, empruntant jusqu'à 10 millions de reUSD à un coût très faible.
Transaction d'attaque :
Adresse du contrat ResupplyPair :
Adresse du contrat controller du coffre :
Adresse du contrat du coffre :
Adresse du contrat oracle :
Afficher l’original



68,35 k
307
Le contenu de cette page est fourni par des tiers. Sauf indication contraire, OKX n’est pas l’auteur du ou des articles cités et ne revendique aucun droit d’auteur sur le contenu. Le contenu est fourni à titre d’information uniquement et ne représente pas les opinions d’OKX. Il ne s’agit pas d’une approbation de quelque nature que ce soit et ne doit pas être considéré comme un conseil en investissement ou une sollicitation d’achat ou de vente d’actifs numériques. Dans la mesure où l’IA générative est utilisée pour fournir des résumés ou d’autres informations, ce contenu généré par IA peut être inexact ou incohérent. Veuillez lire l’article associé pour obtenir davantage de détails et d’informations. OKX n’est pas responsable du contenu hébergé sur des sites tiers. La détention d’actifs numériques, y compris les stablecoins et les NFT, implique un niveau de risque élevé et leur valeur peut considérablement fluctuer. Examinez soigneusement votre situation financière pour déterminer si le trading ou la détention d’actifs numériques vous convient.