Le 8 janvier 2026, le protocole Truebit Protocol a été piraté, entraînant une perte de 8 535,36 ETH (environ 26,44 millions de dollars). Truebit Protocol a confirmé l'incident par un communiqué officiel le lendemain matin. L'équipe de sécurité ExVul a réalisé une analyse détaillée de cette attaque, dont les résultats sont les suivants :
Processus de l'attaque
Adresse de l'attaquant :
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
Hash de la transaction d'attaque :
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
L'attaquant a effectué l'attaque en appelant cycliquement, sur 4 tours, les transactions getPurchasePrice→0xa0296215→0xc471b10b. Prenons l'exemple du premier cycle pour l'analyse.
1. L'attaquant appelle d'abord la fonction getPurchasePrice(240442509453545333947284131), qui renvoie 0.
2. L'attaquant appelle la fonction 0xa0296215(c6e3ae8e2cbab1298abaa3) avec msg.value à 0. Finalement, 240442509453545333947284131 jetons TRU sont frappés avec succès.
3. L'attaquant appelle la fonction 0xc471b10b(c6e3ae8e2cbab1298abaa3). Finalement, 240442509453545333947284131 jetons TRU sont brûlés, et 5105,06 ETH sont obtenus.
Analyse de la logique d'attaque
En examinant le processus d'attaque ci-dessus, on constate clairement un problème dans la logique des fonctions getPurchasePrice et 0xa0296215. Voici une analyse approfondie (le contrat n'étant pas open source, le code ci-dessous est du code décompilé).
En comparant les points communs des deux fonctions, nous pouvons voir que la fonction 0x1446 est utilisée pour obtenir le montant d'ETH nécessaire à l'achat d'une quantité spécifiée de TRU. Il est évident que la logique de la fonction 0x1446 présente un problème, conduisant à un calcul erroné de l'ETH. Analysons en détail la logique de la fonction 0x1446.
En observant la logique de la fonction 0x1446, puisque le résultat final v13 == 0, le problème doit provenir de la logique de calcul mentionnée ci-dessus. Il est important de noter que la fonction 0x18ef est similaire à _SafeMul, donc le problème se situe dans l'addition native v12 + v9 (la version du contrat étant ^0.6.10, il n'y a pas de vérification de dépassement).
v12 et v9 représentent respectivement :
Grâce à l'analyse ci-dessus, la stratégie d'attaque consiste à saisir un _amountIn énorme, afin que v12 + v9 déborde et devienne une très petite valeur, conduisant finalement à (v12 + v9) / v6 == 0.
Conclusion
La cause fondamentale de cette attaque contre Truebit Protocol réside dans une vulnérabilité grave de dépassement d'entier dans la logique de calcul du prix d'achat des jetons. Comme le contrat utilise la version Solidity ^0.6.10 et n'effectue pas de contrôles de sécurité sur les opérations arithmétiques clés, cela a finalement entraîné une perte importante de 8 535,36 ETH. Les versions récentes de Solidity ont atténué les vulnérabilités de dépassement. Cette attaque est probablement le fait de pirates utilisant l'IA pour analyser automatiquement les vulnérabilités d'anciens protocoles DeFi déjà en ligne (comme les attaques récentes contre Balancer et yETH). Nous pensons que ce type d'attaques utilisant l'IA contre d'anciens protocoles DeFi va se multiplier prochainement. Par conséquent, nous recommandons aux projets de faire auditer leur code de contrat pour renforcer la sécurité, de mettre à jour le contrat ou de transférer les actifs en cas de vulnérabilité détectée, et de mettre en place une surveillance sur la chaîne pour détecter rapidement les anomalies et minimiser les pertes.













