La réapparition de la vulnérabilité de débordement d'entier dans le langage Move
Récemment, une grave vulnérabilité d'overflow d'entier a été découverte dans le langage Move. Cette vulnérabilité se manifeste lors de la vérification de la sécurité des références, ce qui peut conduire à des attaques par déni de service. En analysant en profondeur cette vulnérabilité, nous pouvons obtenir une compréhension plus approfondie du langage Move.
Le langage Move effectue une vérification de code avant l'exécution du bytecode, divisée en quatre étapes. Cette vulnérabilité apparaît dans l'étape reference_safety. Le module reference_safety est responsable de la vérification de la légitimité des opérations de référence, 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 processus de vérification se fait par unités de fonction. Pour chaque fonction, les blocs de base sont d'abord identifiés. Un bloc de base est une séquence de code continue, avec des branches uniquement aux entrées et sorties. Ensuite, chaque bloc de base est analysé, générant des états avant et après l'exécution, et l'état est propagé aux blocs suivants.
L'état contient deux parties d'informations : locals et le graphe d'emprunt. Les locals enregistrent les informations sur les variables locales, tandis que le graphe d'emprunt représente les relations de référence entre les variables. Le processus d'analyse mettra continuellement à jour ces informations d'état.
Une vulnérabilité se produit lors du processus de fusion d'état. Lorsque le nombre total de paramètres de fonction et de variables locales dépasse 256, en raison de l'utilisation du type u8 pour représenter l'index, un dépassement d'entier se produit. Cela entraîne des erreurs dans les informations d'état fusionnées, ce qui peut à son tour entraîner une attaque par déni de service.
Bien que le langage Move dispose d'un mécanisme pour vérifier le nombre de variables locales, il ne prend pas en compte le nombre de paramètres. Cette négligence a conduit à l'apparition d'une vulnérabilité.
Pour déclencher cette vulnérabilité, un attaquant peut construire un bloc de code en boucle, utilisant un dépassement pour modifier l'état du bloc. Lorsque le bloc est exécuté à nouveau, en raison d'informations d'état erronées, l'accès à des variables inexistantes peut entraîner un plantage du programme.
Cette vulnérabilité démontre à nouveau que même les langages soigneusement conçus peuvent avoir des failles de sécurité. Elle nous rappelle l'importance de l'audit de code et la nécessité d'une considération de sécurité plus complète dans la conception des langages. Pour le langage Move, l'ajout de plus de vérifications à l'exécution pourrait être une direction d'amélioration.
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.
15 J'aime
Récompense
15
3
Reposter
Partager
Commentaire
0/400
GateUser-a606bf0c
· Il y a 8h
Le mouvement est vraiment trop instable, n'est-ce pas ?
Voir l'originalRépondre0
down_only_larry
· Il y a 22h
Comment ça se fait que ce soit encore un move ? Ça a planté.
Une vulnérabilité d'overflow d'entier dans le langage Move exposée, les vérifications de sécurité présentent des risques.
La réapparition de la vulnérabilité de débordement d'entier dans le langage Move
Récemment, une grave vulnérabilité d'overflow d'entier a été découverte dans le langage Move. Cette vulnérabilité se manifeste lors de la vérification de la sécurité des références, ce qui peut conduire à des attaques par déni de service. En analysant en profondeur cette vulnérabilité, nous pouvons obtenir une compréhension plus approfondie du langage Move.
Le langage Move effectue une vérification de code avant l'exécution du bytecode, divisée en quatre étapes. Cette vulnérabilité apparaît dans l'étape reference_safety. Le module reference_safety est responsable de la vérification de la légitimité des opérations de référence, 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 processus de vérification se fait par unités de fonction. Pour chaque fonction, les blocs de base sont d'abord identifiés. Un bloc de base est une séquence de code continue, avec des branches uniquement aux entrées et sorties. Ensuite, chaque bloc de base est analysé, générant des états avant et après l'exécution, et l'état est propagé aux blocs suivants.
L'état contient deux parties d'informations : locals et le graphe d'emprunt. Les locals enregistrent les informations sur les variables locales, tandis que le graphe d'emprunt représente les relations de référence entre les variables. Le processus d'analyse mettra continuellement à jour ces informations d'état.
Une vulnérabilité se produit lors du processus de fusion d'état. Lorsque le nombre total de paramètres de fonction et de variables locales dépasse 256, en raison de l'utilisation du type u8 pour représenter l'index, un dépassement d'entier se produit. Cela entraîne des erreurs dans les informations d'état fusionnées, ce qui peut à son tour entraîner une attaque par déni de service.
Bien que le langage Move dispose d'un mécanisme pour vérifier le nombre de variables locales, il ne prend pas en compte le nombre de paramètres. Cette négligence a conduit à l'apparition d'une vulnérabilité.
Pour déclencher cette vulnérabilité, un attaquant peut construire un bloc de code en boucle, utilisant un dépassement pour modifier l'état du bloc. Lorsque le bloc est exécuté à nouveau, en raison d'informations d'état erronées, l'accès à des variables inexistantes peut entraîner un plantage du programme.
Cette vulnérabilité démontre à nouveau que même les langages soigneusement conçus peuvent avoir des failles de sécurité. Elle nous rappelle l'importance de l'audit de code et la nécessité d'une considération de sécurité plus complète dans la conception des langages. Pour le langage Move, l'ajout de plus de vérifications à l'exécution pourrait être une direction d'amélioration.