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 américains). L'équipe officielle de Truebit Protocol a confirmé cet incident dans un communiqué publié le lendemain matin. L'équipe de sécurité ExVul a mené une analyse approfondie de cette attaque, et les résultats de l'analyse sont les suivants :
Processus d'attaque
Adresse de l'attaquant :
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
Hash de la transaction d'attaque :
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
L'attaquant a mené l'attaque en effectuant une transaction qui appelle successivement quatre fois getPurchasePrice→0xa0296215→0xc471b10b. Prenons le premier cycle comme exemple pour l'analyser.
1. L'attaquant appelle d'abord la fonction getPurchasePrice(240442509453545333947284131), qui retourne 0.

2. L'attaquant appelle la fonction 0xa0296215(c6e3ae8e2cbab1298abaa3) avec un msg.value de 0. Finalement, il réussit à frapper 240442509453545333947284131 jetons TRU.

3. L'attaquant appelle la fonction 0xc471b10b(c6e3ae8e2cbab1298abaa3). Enfin, 240442509453545333947284131 jetons TRU sont détruits, et l'attaquant obtient 5105,06 ETH.
Analyse de la logique d'attaque
En comprenant le processus d'attaque mentionné ci-dessus, il devient évident qu'il existe un problème logique dans les fonctions `getPurchasePrice` et `0xa0296215`. Nous allons maintenant procéder à une analyse approfondie (puisque le contrat n'est pas open source, le code utilisé ci-dessous provient d'un décompilateur).


En comparant les points communs entre les deux fonctions, nous pouvons constater que la fonction 0x1446 est utilisée pour calculer la quantité d'ETH nécessaire pour acheter un certain nombre de TRU. Il est évident que la logique de la fonction 0x1446 comporte un problème, ce qui entraîne une erreur dans le calcul de l'ETH. Nous allons maintenant analyser en détail la logique de la fonction 0x1446.

Analysez la logique de la fonction 0x1446. Étant donné que le résultat final du calcul v13 == 0, il est certain qu'il y a un problème dans la logique de calcul ci-dessus. Il convient de noter que la fonction 0x18ef est identique à _SafeMul, donc le problème réside dans l'utilisation de l'addition native v12 + v9 (la version du contrat est ^0.6.10, donc aucune vérification de débordement n'est effectuée).
v12 et v9 signifient respectivement :

D'après l'analyse ci-dessus, la stratégie d'attaque de l'attaquant consiste à entrer une valeur _amountIn extrêmement grande, ce qui fait déborder v12 + v9 en une valeur très petite, et finalement rend (v12 + v9) / v6 égal à 0.
Résumé
La cause fondamentale de l'attaque subie par le protocole Truebit réside dans un grave bug de débordement d'entier (integer overflow) dans la logique de calcul du prix d'achat du jeton. En raison de l'utilisation de la version Solidity ^0.6.10 par le contrat et de l'absence de vérifications de sécurité pour les opérations arithmétiques critiques, cela a entraîné une perte importante de 8 535,36 ETH. Actuellement, les nouvelles versions de Solidity incluent des protections intégrées contre les débordements d'entier. Cette attaque a probablement été découverte par un pirate informatique utilisant l'intelligence artificielle pour scanner automatiquement certaines anciennes protocoles DeFi déployés (comme récemment Balancer et yETH). Nous pensons que ce type d'attaques, utilisant l'IA pour cibler des protocoles DeFi obsolètes, va s'accroître dans les prochaines semaines. Nous recommandons donc fortement aux équipes de projets de réaliser de nouvelles audits de sécurité de leurs contrats intelligents. En cas de vulnérabilités découvertes, il est essentiel de procéder rapidement à des mises à jour de contrats ou à des transferts d'actifs, tout en mettant en place un suivi actif de la chaîne de blocs afin de détecter rapidement les anomalies et minimiser les pertes.

