La langue Move présente à nouveau une vulnérabilité critique : un débordement d'entier peut entraîner l'effondrement du Nœud
Récemment, des chercheurs en sécurité ont effectué une analyse approfondie du langage Move et ont découvert une nouvelle vulnérabilité de débordement d'entier. Cette vulnérabilité se produit lors du processus de vérification de la sécurité des références dans le langage Move, ce qui pourrait entraîner un effondrement du Nœud.
Le langage Move effectue une vérification de code avant l'exécution du bytecode, qui se divise en quatre étapes. La vulnérabilité récemment découverte se trouve dans l'étape reference_safety. Cette étape est principalement utilisée pour vérifier la sécurité des références, y compris la vérification de l'existence de références nulles et la sécurité d'accès aux références mutables.
Le déclenchement des vulnérabilités est lié au concept de bloc de base dans le langage Move. Un bloc de base est une séquence de code sans instructions de branchement, à l'exception des entrées et sorties. Move identifie les blocs de base en parcourant le bytecode et en recherchant des instructions de branchement.
Dans le processus de validation de la sécurité des références, le système va scanner les instructions de bytecode dans chaque bloc de base et déterminer si toutes les opérations de référence sont légales. Ce processus utilise la structure AbstractState, qui contient deux composants importants : le borrow graph et les locals.
La vulnérabilité se trouve dans la fonction join_. Lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, un dépassement d'entier peut se produire en raison de l'utilisation du type u8 pour représenter l'index local. Bien que Move dispose d'un mécanisme de vérification du nombre de locals, la longueur des paramètres n'est pas incluse.
En utilisant cette vulnérabilité de débordement, un attaquant peut construire un bloc de code en boucle pour modifier l'état du bloc. Lors de l'exécution à nouveau du bloc de base, si l'index requis par l'instruction n'existe pas dans la nouvelle carte des locaux, cela entraînera un crash du programme.
Les chercheurs ont fourni une preuve de concept (PoC) qui démontre comment déclencher cette vulnérabilité. En définissant des paramètres spécifiques et un nombre de variables locales, il est possible de réduire la longueur de la carte des locaux à 8. Lors de la prochaine exécution, essayer d'accéder à l'index inexistant 57 provoquera un panic.
Cette faille prouve encore une fois qu'il n'existe pas de code absolument sécurisé. Bien que le langage Move effectue une vérification statique avant l'exécution, il peut encore être contourné par un débordement d'entier. Les chercheurs suggèrent aux concepteurs du langage Move d'ajouter davantage de code de vérification à l'exécution pour éviter que des problèmes similaires ne se produisent.
Actuellement, l'équipe de recherche a découvert une autre vulnérabilité dans le langage Move, et partagera plus de détails par la suite. Ces découvertes sont d'une grande importance pour l'amélioration de la sécurité du langage Move.
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.
11 J'aime
Récompense
11
4
Partager
Commentaire
0/400
PositionPhobia
· Il y a 10h
Combien de pièges y a-t-il dans ce code ? Un de passé, un de pris.
Vulnérabilité de débordement d'entiers dans le langage Move : risque lié à la vérification de la sécurité des références
La langue Move présente à nouveau une vulnérabilité critique : un débordement d'entier peut entraîner l'effondrement du Nœud
Récemment, des chercheurs en sécurité ont effectué une analyse approfondie du langage Move et ont découvert une nouvelle vulnérabilité de débordement d'entier. Cette vulnérabilité se produit lors du processus de vérification de la sécurité des références dans le langage Move, ce qui pourrait entraîner un effondrement du Nœud.
Le langage Move effectue une vérification de code avant l'exécution du bytecode, qui se divise en quatre étapes. La vulnérabilité récemment découverte se trouve dans l'étape reference_safety. Cette étape est principalement utilisée pour vérifier la sécurité des références, y compris la vérification de l'existence de références nulles et la sécurité d'accès aux références mutables.
Le déclenchement des vulnérabilités est lié au concept de bloc de base dans le langage Move. Un bloc de base est une séquence de code sans instructions de branchement, à l'exception des entrées et sorties. Move identifie les blocs de base en parcourant le bytecode et en recherchant des instructions de branchement.
Dans le processus de validation de la sécurité des références, le système va scanner les instructions de bytecode dans chaque bloc de base et déterminer si toutes les opérations de référence sont légales. Ce processus utilise la structure AbstractState, qui contient deux composants importants : le borrow graph et les locals.
La vulnérabilité se trouve dans la fonction join_. Lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, un dépassement d'entier peut se produire en raison de l'utilisation du type u8 pour représenter l'index local. Bien que Move dispose d'un mécanisme de vérification du nombre de locals, la longueur des paramètres n'est pas incluse.
En utilisant cette vulnérabilité de débordement, un attaquant peut construire un bloc de code en boucle pour modifier l'état du bloc. Lors de l'exécution à nouveau du bloc de base, si l'index requis par l'instruction n'existe pas dans la nouvelle carte des locaux, cela entraînera un crash du programme.
Les chercheurs ont fourni une preuve de concept (PoC) qui démontre comment déclencher cette vulnérabilité. En définissant des paramètres spécifiques et un nombre de variables locales, il est possible de réduire la longueur de la carte des locaux à 8. Lors de la prochaine exécution, essayer d'accéder à l'index inexistant 57 provoquera un panic.
Cette faille prouve encore une fois qu'il n'existe pas de code absolument sécurisé. Bien que le langage Move effectue une vérification statique avant l'exécution, il peut encore être contourné par un débordement d'entier. Les chercheurs suggèrent aux concepteurs du langage Move d'ajouter davantage de code de vérification à l'exécution pour éviter que des problèmes similaires ne se produisent.
Actuellement, l'équipe de recherche a découvert une autre vulnérabilité dans le langage Move, et partagera plus de détails par la suite. Ces découvertes sont d'une grande importance pour l'amélioration de la sécurité du langage Move.