Analyse des vulnérabilités de débordement d'entier dans les vérifications de sécurité des références du langage Move
Récemment, une nouvelle vulnérabilité de dépassement d'entier a été découverte dans le processus de vérification de la sécurité dans le langage Move. Cette vulnérabilité se manifeste dans l'étape de référence_safety de l'unité de code de vérification, impliquant les blocs fondamentaux et le mécanisme de sécurité des références dans le langage Move.
Le langage Move effectue une vérification de code avant l'exécution du bytecode, qui se divise en quatre étapes. La vérification de la sécurité des références est un élément important, utilisé pour vérifier s'il existe des références suspendues et si l'accès aux références mutables est sécurisé, etc. Le processus de vérification parcourt les instructions de bytecode de chaque bloc de base.
Un bloc de base fait référence à une séquence de code sans instructions de branchement, à l'exception des entrées et des sorties. Le langage Move identifie les blocs de base en vérifiant les instructions de branchement et de boucle. La vérification de la sécurité des références examine les instructions de chaque bloc de base pour déterminer la légalité des opérations de référence.
Le processus de validation utilise la structure AbstractState pour représenter l'état, contenant deux composants clés : locals et le graphe d'emprunt. La validation compare les états avant et après l'exécution, fusionne les résultats et les propage aux blocs suivants.
Une vulnérabilité se produit dans la fonction join_. Lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, une débordement d'entier se produit en raison de l'utilisation de l'itérateur de type u8 pour les locals. Cela peut entraîner un nouveau map de locals différent de l'ancien, ce qui, lors d'une nouvelle exécution, peut aboutir à l'accès à un index inexistant, provoquant un déni de service.
Le code PoC déclenche un dépassement d'entier en définissant des paramètres spécifiques et en réduisant le nombre de variables locales, ce qui entraîne une réduction de la longueur de la carte des locaux. Lors d'une nouvelle exécution, l'accès à un offset inexistant déclenche finalement un panic.
Cette vulnérabilité montre que même les langages à typage statique peuvent avoir des problèmes de sécurité. Il est recommandé aux concepteurs du langage Move d'ajouter davantage de contrôles de sécurité à l'exécution, et pas seulement de compter sur les vérifications de 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.
13 J'aime
Récompense
13
5
Partager
Commentaire
0/400
Web3ExplorerLin
· 08-01 00:31
Le problème de débordement nécessite un audit maintenant
La vulnérabilité d'overflow d'entier de validation de sécurité de référence du langage Move peut entraîner un déni de service.
Analyse des vulnérabilités de débordement d'entier dans les vérifications de sécurité des références du langage Move
Récemment, une nouvelle vulnérabilité de dépassement d'entier a été découverte dans le processus de vérification de la sécurité dans le langage Move. Cette vulnérabilité se manifeste dans l'étape de référence_safety de l'unité de code de vérification, impliquant les blocs fondamentaux et le mécanisme de sécurité des références dans le langage Move.
Le langage Move effectue une vérification de code avant l'exécution du bytecode, qui se divise en quatre étapes. La vérification de la sécurité des références est un élément important, utilisé pour vérifier s'il existe des références suspendues et si l'accès aux références mutables est sécurisé, etc. Le processus de vérification parcourt les instructions de bytecode de chaque bloc de base.
Un bloc de base fait référence à une séquence de code sans instructions de branchement, à l'exception des entrées et des sorties. Le langage Move identifie les blocs de base en vérifiant les instructions de branchement et de boucle. La vérification de la sécurité des références examine les instructions de chaque bloc de base pour déterminer la légalité des opérations de référence.
Le processus de validation utilise la structure AbstractState pour représenter l'état, contenant deux composants clés : locals et le graphe d'emprunt. La validation compare les états avant et après l'exécution, fusionne les résultats et les propage aux blocs suivants.
Une vulnérabilité se produit dans la fonction join_. Lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, une débordement d'entier se produit en raison de l'utilisation de l'itérateur de type u8 pour les locals. Cela peut entraîner un nouveau map de locals différent de l'ancien, ce qui, lors d'une nouvelle exécution, peut aboutir à l'accès à un index inexistant, provoquant un déni de service.
Le code PoC déclenche un dépassement d'entier en définissant des paramètres spécifiques et en réduisant le nombre de variables locales, ce qui entraîne une réduction de la longueur de la carte des locaux. Lors d'une nouvelle exécution, l'accès à un offset inexistant déclenche finalement un panic.
Cette vulnérabilité montre que même les langages à typage statique peuvent avoir des problèmes de sécurité. Il est recommandé aux concepteurs du langage Move d'ajouter davantage de contrôles de sécurité à l'exécution, et pas seulement de compter sur les vérifications de la phase de validation. Cela souligne également l'importance de l'audit de code.