Le 15 mai 2024, Sonne Finance a été attaquée et le projet a perdu plus de 20 millions de dollars américains.

SharkTeam a immédiatement effectué une analyse technique de cet incident et résumé les précautions de sécurité. Nous espérons que les projets ultérieurs pourront en tirer des leçons et construire conjointement une ligne de défense de sécurité pour l'industrie de la blockchain.

1. Analyse des transactions d'attaque

Attaquant : 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43

Contrat d'attaque : 0x02fa2625825917e9b1f8346a465de1bbc150c5b9

Contrat cible : 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5

Transaction d'attaque : 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

Le processus d'attaque est le suivant :

1. Prêt Flash 35, 569, 150 VELO, et transférez ces Tokens VELO sur le contrat soVELO

Puisqu'il s'agit d'un transfert direct (don), le jeton soVELO n'est pas émis. Par conséquent, dans le contrat soVELO, le total des liquidités a augmenté de 35 569 150 VELO et l'offre totale de soVELO est restée inchangée.

2. L'attaquant crée un nouveau contrat 0xa16388a6210545b27f669d5189648c1722300b8b et lance une attaque sur le contrat cible dans le nouveau contrat. Le processus d'attaque est le suivant :

(1) Transférer 2 soVELO vers le nouveau contrat

(2) Déclarer soWETH et soVELO en garantie

(3) Emprunter 265, 842, 857, 910, 985, 546, 929 WETH à soWETH

À partir du processus d'exécution de la fonction d'emprunt ci-dessus, basé sur la valeur de retour de la fonction getAccountSnapshot, nous avons trouvé :

Pour le contrat soWETH, le nouveau solde du contrat est de 0, le montant du prêt est de 0 et le taux de change (exchangeRate) est de 208, 504, 036, 856, 714, 856, 032, 085, 073.

Pour le contrat soVELO, le nouveau solde du contrat est de 2, c'est-à-dire que 2 wei de soVELO sont hypothéqués, le montant du prêt est de 0 et le taux de change (exchangeRate) est de 17 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000

Le taux de change est calculé comme suit :

Avec 1 wei de soVELO hypothéqué, vous ne pouvez emprunter que 17 735, 851, 964, 756, 377, 265, 143, 988 VELO, et emprunter 265, 842, 857, 910, 985, 546, 929 WETH, vous devez hypothéquer au moins 265 , 842, 857, 910, 985, 546, 929 soWETH,

Le prix de soWETH : soWETHPrice = 2, 892, 868, 789, 980, 000, 000, 000,

Le prix de soVELO : soVELOPrice = 124 601 260 000 000 000

Le montant de WETH qui peut être emprunté par soVELO avec une hypothèque de 1 wei est le suivant :

1 * taux de change * soVELOPrice / soWETHPrice = 763, 916, 258, 364, 900, 996, 923

Environ 763 WETH. Seulement 1 wei d’hypothèque soVELO suffit pour soutenir ce prêt.

Emprunter 265, 842, 857, 910, 985, 546, 929 WETH (environ 265 WETH) est converti en garantie soVELO. Le montant minimum de soVELO requis pour être hypothéqué est de :

265, 842, 857, 910, 985, 546, 929 * soWETHPrice / soVELOPrice / changeRate = 0,348

Autrement dit, 1 wei de garantie soVELO est suffisant.

En fait, 2 wei de garantie soVELO ont été utilisés pour emprunter seulement 1 wei

(4) Racheter les actifs sous-jacents, à savoir 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO

taux d'échange = 17 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000

Le montant de la garantie soVELO nécessaire pour racheter 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO est

35, 471, 603, 929, 512, 754, 530, 287, 976 * 1 e 18 / taux d'échange = 1,99999436

Lors du calcul, étant donné que le calcul utilise la troncature au lieu de l'arrondi, la garantie requise réelle calculée est de 1 wei de soVELO.

La garantie réelle est de 2 wei de soVELO, dont 1 wei est utilisé pour le prêt ci-dessus de 265 WETH, et le 1 wei restant est utilisé pour racheter 35 M VELO.

(5) Transférer les 265 WETH prêtés et les 35 M VELO rachetés au contrat d'attaque

3. Répétez 3 fois (4 fois au total) pour créer un nouveau contrat et répétez l'attaque.

4. Enfin, remboursez le prêt flash.

2. Analyse de vulnérabilité

Deux vulnérabilités ont été exploitées lors de l'attaque ci-dessus :

(1) Attaque de don : transférer (faire un don) directement du jeton VELO au contrat soVELO, modifiant le taux d'échange, permettant à l'attaquant de prêter environ 265 WETH avec seulement 1 wei soVELO en garantie

(2) Problème de précision du calcul : en utilisant la perte de précision pendant le processus de calcul et le taux de change modifié, 35 M VELO peuvent être rachetés lorsque seulement 1 wei soVELO est hypothéqué.

3. Suggestions de sécurité

En réponse à cette attaque, nous devons suivre les précautions suivantes pendant le processus de développement :

(1) Pendant le processus de conception et de développement du projet, l'intégrité et la rigueur de la logique doivent être maintenues, en particulier les questions de dépôt, de gage, de mise à jour des variables d'état et de compromis entre les résultats des calculs de multiplication et de division au cours du processus de conception et de développement du projet. processus de calcul. Il faut considérer autant de situations que possible pour que la logique soit complète et qu'il n'y ait pas de failles.

(2) Avant la mise en ligne du projet, un audit de contrat intelligent doit être effectué par une société d'audit professionnelle tierce.

À propos de nous

La vision de SharkTeam est de sécuriser le monde Web3. L'équipe est composée de professionnels de la sécurité expérimentés et de chercheurs chevronnés du monde entier, qui maîtrisent la théorie sous-jacente de la blockchain et des contrats intelligents. Il fournit des services comprenant l'identification et le blocage des risques, l'audit des contrats intelligents, KYT/AML, l'analyse en chaîne et d'autres services, et a créé une plate-forme intelligente d'identification et de blocage des risques en chaîne ChainAegis, qui peut lutter efficacement contre la menace persistante avancée (avancée Menace persistante) dans le monde Web3, APT). Elle a établi des relations de coopération à long terme avec des acteurs clés dans divers domaines de l'écosystème Web3, tels que Polkadot, Moonbeam, polygon, Sui, OKX, imToken, Collab.Land, TinTinLand, etc.

Site officiel : https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Télégramme:https://t.me/sharkteamorg

Discorde : https://discord.gg/jGH9xXCjDZ