La mécanisme de sécurité de citation du langage Move expose une vulnérabilité de débordement d'entier pouvant entraîner une attaque par déni de service.
Le mécanisme de sécurité des références du langage Move présente une vulnérabilité de débordement d'entier
Récemment, des chercheurs en sécurité ont découvert une nouvelle vulnérabilité de débordement entier lors de l'analyse approfondie du langage Move. Cette vulnérabilité se manifeste lors du processus de vérification de la sécurité des références du langage Move, ce qui pourrait permettre une attaque par déni de service.
Le langage Move effectue une vérification du code avant l'exécution du bytecode, qui se divise en 4 étapes. Cette vulnérabilité existe lors de la phase de vérification de la sécurité des références (reference_safety). L'objectif principal de la vérification de la sécurité des références est de garantir qu'il n'y a pas de références suspendues, que l'accès aux références mutables est sécurisé, et que l'accès aux références de stockage global est sécurisé.
Le processus de vérification parcourra les instructions de bytecode de chaque bloc de base. Un bloc de base est une séquence de code sans instructions de branchement, à l'exception de l'entrée et de la sortie. Le langage Move identifie les blocs de base en analysant les instructions de branchement et les instructions de boucle.
La vérification de sécurité utilise la structure AbstractState pour suivre les variables locales et les relations de référence. Elle comprend deux parties : locals et borrow graph. Lors de la vérification, les états avant et après l'exécution sont comparés, puis fusionnés et mis à jour.
Une vulnérabilité se trouve dans la fonction join_ en état de fusion. Cette fonction itère sur les locaux de type u8, mais si le nombre de paramètres et de variables locales dépasse 256, cela peut entraîner un débordement entier. Bien qu'il y ait une logique de vérification du nombre de locaux, la longueur des paramètres n'est pas prise en compte.
Un attaquant peut construire un bloc de base cyclique, exploitant ce débordement pour modifier l'état. Lors d'une nouvelle exécution, l'accès à un index locals inexistant entraînera un panic, ce qui peut provoquer un déni de service.
Cette vulnérabilité montre que même les langages statiquement typés peuvent présenter des risques de sécurité. Il est recommandé d'ajouter davantage de vérifications de sécurité lors de l'exécution du langage Move, au lieu de se fier uniquement à la phase de validation. Cela souligne également l'importance de l'audit de code.
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
La mécanisme de sécurité de citation du langage Move expose une vulnérabilité de débordement d'entier pouvant entraîner une attaque par déni de service.
Le mécanisme de sécurité des références du langage Move présente une vulnérabilité de débordement d'entier
Récemment, des chercheurs en sécurité ont découvert une nouvelle vulnérabilité de débordement entier lors de l'analyse approfondie du langage Move. Cette vulnérabilité se manifeste lors du processus de vérification de la sécurité des références du langage Move, ce qui pourrait permettre une attaque par déni de service.
Le langage Move effectue une vérification du code avant l'exécution du bytecode, qui se divise en 4 étapes. Cette vulnérabilité existe lors de la phase de vérification de la sécurité des références (reference_safety). L'objectif principal de la vérification de la sécurité des références est de garantir qu'il n'y a pas de références suspendues, que l'accès aux références mutables est sécurisé, et que l'accès aux références de stockage global est sécurisé.
Le processus de vérification parcourra les instructions de bytecode de chaque bloc de base. Un bloc de base est une séquence de code sans instructions de branchement, à l'exception de l'entrée et de la sortie. Le langage Move identifie les blocs de base en analysant les instructions de branchement et les instructions de boucle.
La vérification de sécurité utilise la structure AbstractState pour suivre les variables locales et les relations de référence. Elle comprend deux parties : locals et borrow graph. Lors de la vérification, les états avant et après l'exécution sont comparés, puis fusionnés et mis à jour.
Une vulnérabilité se trouve dans la fonction join_ en état de fusion. Cette fonction itère sur les locaux de type u8, mais si le nombre de paramètres et de variables locales dépasse 256, cela peut entraîner un débordement entier. Bien qu'il y ait une logique de vérification du nombre de locaux, la longueur des paramètres n'est pas prise en compte.
Un attaquant peut construire un bloc de base cyclique, exploitant ce débordement pour modifier l'état. Lors d'une nouvelle exécution, l'accès à un index locals inexistant entraînera un panic, ce qui peut provoquer un déni de service.
Cette vulnérabilité montre que même les langages statiquement typés peuvent présenter des risques de sécurité. Il est recommandé d'ajouter davantage de vérifications de sécurité lors de l'exécution du langage Move, au lieu de se fier uniquement à la phase de validation. Cela souligne également l'importance de l'audit de code.