Une nouvelle vulnérabilité critique dans le langage Move : un dépassement d'entier peut entraîner l'effondrement du Nœud
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, pouvant entraîner un crash du nœud. Cette vulnérabilité se trouve dans le module de vérification de la sécurité des références du langage Move, impliquant l'analyse des blocs fondamentaux et le processus de fusion d'état.
Le langage Move effectue une vérification de code avant d'exécuter le bytecode, divisée en 4 étapes. La vulnérabilité découverte se situe à la phase de vérification de la sécurité de référence (reference_safety). Cette étape analysera les blocs de base dans la fonction et validera la légitimité des opérations de référence.
Pendant le processus de vérification, une structure AbstractState sera maintenue, contenant des variables locales (locals) et un graphique de relations d'emprunt (borrow graph). Lors de l'analyse des blocs de base, des instructions à l'intérieur du bloc seront exécutées pour générer un état postérieur, qui sera ensuite fusionné avec l'état précédent pour mettre à jour l'état.
La vulnérabilité se produit dans la fonction join_ en état de fusion. Cette fonction parcourt la variable locals, mais locals contient les paramètres de la fonction et les variables locales. Lorsque la somme du nombre de paramètres et du nombre de variables locales dépasse 256, un débordement entier se produit en raison de l'utilisation du type u8 pour l'itération.
Un attaquant peut construire des blocs de code circulaires spéciaux pour exploiter ce débordement et modifier l'état. Lors de l'analyse suivante, certaines instructions peuvent accéder à des index locals inexistants, déclenchant ainsi un panic qui entraîne l'effondrement du Nœud.
Les chercheurs ont fourni une preuve de concept (PoC), en configurant 264 variables locales, ce qui peut déclencher un panic lors de la deuxième analyse. Cela expose le manque de contrôles de sécurité adéquats dans le langage Move à l'exécution.
Cette vulnérabilité souligne à nouveau que même le langage Move, qui met l'accent sur la sécurité, peut présenter des failles. Il est conseillé aux concepteurs du langage Move d'ajouter davantage de vérifications de sécurité à l'exécution, et de ne pas se fier uniquement à l'analyse statique de la phase de vérification. Cela rappelle également aux développeurs de renforcer l'audit de code pour éviter de telles négligences.
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.
9 J'aime
Récompense
9
5
Partager
Commentaire
0/400
SmartContractPhobia
· 08-02 02:38
move a complètement échoué, l'original a aussi échoué
Voir l'originalRépondre0
CoconutWaterBoy
· 07-30 03:38
move a encore échoué, il était temps de changer
Voir l'originalRépondre0
SchrodingerWallet
· 07-30 03:36
move a encore fait une erreur.
Voir l'originalRépondre0
0xDreamChaser
· 07-30 03:34
move encore en panne ? Pas assez rapide pour finir l'école
La vulnérabilité de débordement d'entier exposée par le langage Move suscite des préoccupations concernant le risque d'effondrement des Nœuds.
Une nouvelle vulnérabilité critique dans le langage Move : un dépassement d'entier peut entraîner l'effondrement du Nœud
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, pouvant entraîner un crash du nœud. Cette vulnérabilité se trouve dans le module de vérification de la sécurité des références du langage Move, impliquant l'analyse des blocs fondamentaux et le processus de fusion d'état.
Le langage Move effectue une vérification de code avant d'exécuter le bytecode, divisée en 4 étapes. La vulnérabilité découverte se situe à la phase de vérification de la sécurité de référence (reference_safety). Cette étape analysera les blocs de base dans la fonction et validera la légitimité des opérations de référence.
Pendant le processus de vérification, une structure AbstractState sera maintenue, contenant des variables locales (locals) et un graphique de relations d'emprunt (borrow graph). Lors de l'analyse des blocs de base, des instructions à l'intérieur du bloc seront exécutées pour générer un état postérieur, qui sera ensuite fusionné avec l'état précédent pour mettre à jour l'état.
La vulnérabilité se produit dans la fonction join_ en état de fusion. Cette fonction parcourt la variable locals, mais locals contient les paramètres de la fonction et les variables locales. Lorsque la somme du nombre de paramètres et du nombre de variables locales dépasse 256, un débordement entier se produit en raison de l'utilisation du type u8 pour l'itération.
Un attaquant peut construire des blocs de code circulaires spéciaux pour exploiter ce débordement et modifier l'état. Lors de l'analyse suivante, certaines instructions peuvent accéder à des index locals inexistants, déclenchant ainsi un panic qui entraîne l'effondrement du Nœud.
Les chercheurs ont fourni une preuve de concept (PoC), en configurant 264 variables locales, ce qui peut déclencher un panic lors de la deuxième analyse. Cela expose le manque de contrôles de sécurité adéquats dans le langage Move à l'exécution.
Cette vulnérabilité souligne à nouveau que même le langage Move, qui met l'accent sur la sécurité, peut présenter des failles. Il est conseillé aux concepteurs du langage Move d'ajouter davantage de vérifications de sécurité à l'exécution, et de ne pas se fier uniquement à l'analyse statique de la phase de vérification. Cela rappelle également aux développeurs de renforcer l'audit de code pour éviter de telles négligences.