
BitsLab旗下TonBit发现TON VM核心漏洞:漏洞根本原因及缓解措施详解
TechFlow SélectionTechFlow Sélection

BitsLab旗下TonBit发现TON VM核心漏洞:漏洞根本原因及缓解措施详解
Ce rapport analyse en détail les aspects techniques, la cause fondamentale et les méthodes d'attaque potentielles liées à une vulnérabilité critique de type déni de service (DoS) présente dans la machine virtuelle TON, tout en présentant la solution efficace proposée par l'équipe TonBit.
Récemment, le système de machine virtuelle du réseau TON a bénéficié d'une importante mise à jour en matière de sécurité. L'équipe de sécurité TonBit, filiale de BitsLab, a réussi à découvrir et à aider à corriger une vulnérabilité critique pouvant entraîner l'épuisement des ressources de la machine virtuelle TON. Cette faille exploitait le mécanisme récursif utilisé par la machine virtuelle lors du traitement des imbrications de Continuation, ce qui pouvait être abusé par un contrat malveillant pour provoquer un blocage du système et une instabilité du réseau.
Si cette vulnérabilité avait été exploitée de manière malveillante, elle aurait pu provoquer l'arrêt de tous les nœuds validateurs sans nécessiter la dépense d'un seul TON, menaçant directement la disponibilité du réseau. Dans cet incident, TonBit a rapidement identifié la faille grâce à ses compétences techniques exceptionnelles, et proposé une solution innovante consistant à remplacer le mécanisme récursif par une approche itérative au niveau du flux de contrôle interne de la machine virtuelle, créant ainsi un environnement plus sûr pour les utilisateurs de TON. L'équipe officielle de TON a particulièrement remercié TonBit dans son dernier communiqué pour sa contribution remarquable à la sécurité de l'écosystème.

Dans le présent rapport de sécurité détaillé, nous analysons en profondeur l'origine, les aspects techniques et la solution apportée à cette vulnérabilité. Ce document explique comment l’attaque d’épuisement des ressources est rendue possible par l’imbrication profonde de Continuation, formant une chaîne récursive, ainsi que la manière dont un contrat malveillant peut étendre la pile d’appels afin de saturer l’espace mémoire de la machine hôte. Nous détaillons également comment l’équipe TonBit a éliminé ce défaut structurel basé sur la récursivité en adoptant un mécanisme itératif coopératif, permettant ainsi de résoudre définitivement ce problème. Cette correction améliore considérablement la stabilité du réseau TON et fournit une référence importante pour la sécurité fondamentale de l'industrie blockchain.

Étude de cas : Vulnérabilité DoS dans la machine virtuelle TON et mesures correctives associées
Introduction
Ce rapport décrit une vulnérabilité de type DoS (Déni de service) présente dans la machine virtuelle TON, ainsi que les mesures prises pour y remédier. Cette faille découle de la manière dont la machine virtuelle gère l’imbrication des objets « Continuation » pendant l’exécution des contrats. Elle permet à un contrat malveillant de créer des Continuations fortement imbriquées, déclenchant une récursion profonde lors de l’évaluation, épuisant ainsi l’espace de pile du système hôte et faisant cesser le fonctionnement de la machine virtuelle. Pour atténuer ce risque, le traitement des Continuations et du flux de contrôle a été modifié dans la machine virtuelle. Désormais, au lieu d’utiliser des appels terminaux séquentiels selon une chaîne de Continuations, la machine virtuelle parcourt activement cette chaîne de manière itérative. Cette méthode garantit l’utilisation d’un espace de pile constant, empêchant tout débordement.
Synthèse
Selon la documentation officielle, TON VM est une machine virtuelle basée sur une pile, utilisant le style de passage de continuation (CPS – Continuation-Passing Style) comme mécanisme de contrôle du flux, tant pour les processus internes que pour les contrats intelligents. Les registres de contrôle du flux sont accessibles aux contrats, offrant ainsi une grande flexibilité.
Les Continuations dans TVM peuvent théoriquement être divisées en trois catégories :
-
OrdCont (c’est-à-dire vmc_std), contenant des fragments de code TON ASM à exécuter, sont des objets de premier ordre dans TVM. Les contrats peuvent les créer explicitement au moment de l’exécution et les transmettre pour implémenter des flux de contrôle arbitraires.
-
Continuations extraordinaires (Extraordinary continuations), contenant généralement des OrdCont comme composants, créées via des primitives d’itération explicites ou certaines opérations implicites spéciales, utilisées pour gérer des mécanismes de contrôle de flux spécifiques.
-
ArgContExt supplémentaire, encapsulant d'autres Continuations afin de préserver des données de contrôle.
Pendant l'exécution d'un contrat, la machine virtuelle entre dans une boucle principale, décodant un mot du fragment de contrat à chaque fois, puis distribuant l'opération correspondante au gestionnaire approprié. Les gestionnaires ordinaires retournent immédiatement après avoir exécuté leur tâche.
En revanche, les instructions d'itération créent une Continuation extraordinaire en utilisant la Continuation fournie comme composant, puis effectuent un saut vers cette Continuation dans un contexte adapté. La Continuation extraordinaire elle-même implémente la logique au moment du saut et, selon certaines conditions, saute vers l'un de ses composants. Par exemple, avec l'instruction WHILE, ce processus peut être illustré comme sur la figure 1 (les sorties éventuelles sont omises).

Figure 1 : Logique de Continuation extraordinaire
Racine du problème
Dans les versions vulnérables de la machine virtuelle, ces sauts provoquaient des appels terminaux dynamiques successifs, obligeant la pile hôte à conserver un cadre d’activation pour chaque saut (comme illustré sur la figure 2).

Exemple avec WhileCont, les autres parties étant omises pour plus de clarté.

Figure 2 : Triple appel récursif pour une imbrication profonde
Idéalement, cela ne poserait pas de problème car les composants sont généralement représentés par des OrdCont, dont les sauts sauvegardent simplement le contexte courant, puis indiquent à la machine virtuelle d’exécuter le fragment qu’ils contiennent avant le reste du contrat, sans introduire de récursion supplémentaire. Toutefois, les Continuations extraordinaires ont été conçues de manière théorique pour permettre à leurs composants d’accéder au registre cc (c0) de la TVM (c’est-à-dire la branche set_c0 mentionnée ci-dessus). Un contrat peut donc abuser de cette fonctionnalité pour exécuter une récursion profonde (décrite plus loin). Plutôt que de modifier l’implémentation de cette fonctionnalité standard, il est plus clair et plus simple d’éliminer directement la récursion au moment du saut dans les Continuations extraordinaires.
En réutilisant continuellement une Continuation extraordinaire obtenue pour construire une Continuation extraordinaire de niveau supérieur, il est possible, par itération, de créer une Continuation fortement imbriquée. Lors de leur évaluation, ces Continuations très imbriquées peuvent épuiser l’espace de pile disponible sur la machine hôte, provoquant un signal SIGSEGV du système d’exploitation et la terminaison du processus de la machine virtuelle.
La figure 3 illustre une preuve de concept (PoC) du processus d'imbrication.


Figure 3 : Processus d'imbrication
À chaque itération, on observe que le corps s'étend d'un WhileCont{chkcond=true}. En exécutant le cc généré et sauvegardé lors de l'itération précédente, on obtient une pile d'appels similaire à celle-ci :

On constate que l'espace de pile dépend linéairement du niveau d'imbrication (c'est-à-dire du nombre d'itérations), ce qui indique un risque potentiel d'épuisement de la pile.
Exploitation dans un environnement réel
Dans une blockchain réelle, les limitations dues aux frais de gaz rendent la construction de contrats malveillants assez difficile. Étant donné la complexité linéaire du processus d'imbrication (la conception de TVM empêche efficacement des constructions moins coûteuses par auto-référence), développer un contrat malveillant réalisable n'est pas chose aisée. Plus précisément, chaque niveau d'imbrication génère une séquence d'appels consommant trois cadres de pile hôte dans un binaire de débogage (320 octets), et deux cadres dans un binaire publié (256 octets, les deux derniers appels étant fusionnés par inlining). Pour les nœuds validateurs exécutés sur des systèmes POSIX modernes, la taille par défaut de la pile est de 8 Mio, ce qui permet plus de 30 000 niveaux d’imbrication dans un binaire publié. Bien qu’il soit toujours possible de construire un contrat capable d’épuiser la pile, cela s’avère nettement plus difficile que dans l’exemple de la section précédente.
Mesures correctives
Le correctif modifie le comportement des sauts dans les cas d’imbrication de Continuation. On observe que la signature du saut de Continuation a changé.

Exemple avec UntilCont, les autres parties étant omises pour plus de clarté.
Au lieu d’appeler VmState::jump pour passer à la Continuation suivante — ce qui entraînait une triple récursion sur chaque Continuation en attendant la propagation arrière de la valeur de retour — le saut de Continuation résout désormais uniquement le niveau suivant de la Continuation, puis restitue le contrôle à la machine virtuelle.

La machine virtuelle parcourt itérativement chaque niveau de Continuation de manière coopérative jusqu’à rencontrer une référence Null, indiquant que la chaîne a été entièrement résolue (comme implémenté dans OrdCont ou ExuQuitCont). Durant ce processus itératif, un seul cadre de saut de Continuation est alloué sur la pile hôte, garantissant ainsi une utilisation constante de la pile.

Conclusion
Pour les services nécessitant une haute disponibilité, l'utilisation de la récursion peut devenir un vecteur d'attaque potentiel. Lorsque la logique est définie par l'utilisateur, forcer la terminaison de la récursion peut s'avérer difficile. Cette vulnérabilité DoS illustre un cas extrême où une fonctionnalité normale est détournée de manière inattendue dans des conditions de ressources limitées (ou sous d'autres contraintes). Si la récursion dépend de l'entrée utilisateur, des problèmes similaires peuvent survenir, situation fréquente dans les primitives de contrôle de flux des machines virtuelles.
Ce rapport analyse en détail les aspects techniques, la cause fondamentale et les modes d'attaque possibles liés à une vulnérabilité DoS critique dans la machine virtuelle TON, tout en présentant la solution efficace proposée par l'équipe TonBit. En transformant le mécanisme de saut récursif de la machine virtuelle en un traitement itératif, TonBit a réussi à proposer une correction fiable, aidant à résoudre une faille pouvant mener à l'effondrement du réseau, renforçant ainsi la sécurité de l'écosystème TON. Cet événement met en lumière non seulement l'expertise technique approfondie de TonBit dans le domaine de la sécurité des technologies blockchain de base, mais aussi son rôle important en tant que fournisseur officiel de garantie de sécurité (Security Assurance Provider - SAP) pour TON.
En tant que partenaire de sécurité indispensable de l'écosystème TON, TonBit se place constamment à l'avant-garde de la protection de la stabilité des réseaux blockchain et de la sécurité des actifs des utilisateurs. De la découverte de la faille à la conception de la solution, TonBit s'appuie sur ses solides capacités techniques et sa compréhension approfondie de l'évolution de la blockchain pour jeter les bases d'un développement durable du réseau TON. L'équipe TonBit poursuit également ses efforts dans les domaines de l'architecture de sécurité réseau, de la protection des données utilisateur et de l'amélioration de la sécurité dans divers scénarios d'application blockchain. À l'avenir, TonBit continuera d'innover pour faire progresser les technologies de sécurité, soutenant de façon continue le développement sain de l'écosystème TON et de toute l'industrie blockchain. La découverte et la correction de cette vulnérabilité ont reçu une reconnaissance élevée de la part de l'équipe officielle de TON, consolidant davantage la position de TonBit dans le secteur de la sécurité blockchain et témoignant de son engagement ferme en faveur du développement des écosystèmes décentralisés.
Site officiel de TonBit : https://www.tonbit.xyz/
Twitter officiel de TonBit : https://x.com/tonbit_
Telegram : https://t.me/BitsLabHQ
Linkedin : https://www.linkedin.com/company/tonbit-team/
Blog : https://www.tonbit.xyz/#blogs
Contact Telegram pour demandes d'audit : @starchou
Bienvenue dans la communauté officielle TechFlow
Groupe Telegram :https://t.me/TechFlowDaily
Compte Twitter officiel :https://x.com/TechFlowPost
Compte Twitter anglais :https://x.com/BlockFlow_News














