La vérification de sécurité des références dans le langage Move présente une vulnérabilité de débordement entier pouvant entraîner une attaque par déni de service.
Nouvelle vulnérabilité de débordement d'entier découverte dans le langage Move
Récemment, une nouvelle vulnérabilité de débordement d'entier dans le langage Move a été découverte. Cette vulnérabilité se situe dans le processus de vérification de sécurité des références à l'étape de validation du code, ce qui pourrait entraîner une attaque par déni de service.
Le langage Move effectue une vérification du code avant d'exécuter le bytecode, divisée en quatre étapes. La vulnérabilité cette fois-ci est survenue lors de l'étape de référence de sécurité (reference_safety). La vérification de la sécurité des références vérifie principalement s'il existe des références nulles, si l'accès aux références mutables est sécurisé et si l'accès aux références de stockage global est sécurisé.
Pendant le processus de validation, chaque bloc de base sera analysé. Un bloc de base fait référence à une séquence de code sans instructions de branchement, à l'exception de l'entrée et de la sortie. Move identifie les blocs de base en parcourant le code byte, à la recherche d'instructions de branchement et de boucle.
Le module de vérification de sécurité des références scanne les instructions de bytecode dans chaque bloc de base de la fonction pour déterminer si les opérations de référence sont légales. Le processus principal comprend : l'exécution du code du bloc de base, la génération de l'état après exécution, la fusion et la mise à jour de l'état des blocs avant et après l'exécution, et la propagation à des blocs ultérieurs.
Une vulnérabilité se produit lors du processus d'état de fusion. Lorsque la somme du nombre de paramètres de fonction et du nombre de variables locales dépasse 256, un débordement entier se produit en raison de l'utilisation du type u8 pour le stockage. Cela conduit à accéder à des variables locales inexistantes lors des exécutions suivantes, déclenchant ainsi un panic.
Un attaquant peut construire un bloc de base en boucle, utilisant ce débordement pour changer l'état du bloc. Lors d'une nouvelle exécution, l'accès à un index de variable locale inexistant entraînera un déni de service.
Cette vulnérabilité montre que même un langage Move conçu de manière rigoureuse peut présenter des failles de sécurité pouvant être contournées. Il est conseillé aux concepteurs du langage Move d'ajouter davantage de vérifications à l'exécution pour éviter que des situations imprévues se reproduisent. À l'avenir, il sera également nécessaire de renforcer la recherche sur la sécurité du langage Move.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
La vérification de sécurité des références dans le langage Move présente une vulnérabilité de débordement entier pouvant entraîner une attaque par déni de service.
Nouvelle vulnérabilité de débordement d'entier découverte dans le langage Move
Récemment, une nouvelle vulnérabilité de débordement d'entier dans le langage Move a été découverte. Cette vulnérabilité se situe dans le processus de vérification de sécurité des références à l'étape de validation du code, ce qui pourrait entraîner une attaque par déni de service.
Le langage Move effectue une vérification du code avant d'exécuter le bytecode, divisée en quatre étapes. La vulnérabilité cette fois-ci est survenue lors de l'étape de référence de sécurité (reference_safety). La vérification de la sécurité des références vérifie principalement s'il existe des références nulles, si l'accès aux références mutables est sécurisé et si l'accès aux références de stockage global est sécurisé.
Pendant le processus de validation, chaque bloc de base sera analysé. Un bloc de base fait référence à une séquence de code sans instructions de branchement, à l'exception de l'entrée et de la sortie. Move identifie les blocs de base en parcourant le code byte, à la recherche d'instructions de branchement et de boucle.
Le module de vérification de sécurité des références scanne les instructions de bytecode dans chaque bloc de base de la fonction pour déterminer si les opérations de référence sont légales. Le processus principal comprend : l'exécution du code du bloc de base, la génération de l'état après exécution, la fusion et la mise à jour de l'état des blocs avant et après l'exécution, et la propagation à des blocs ultérieurs.
Une vulnérabilité se produit lors du processus d'état de fusion. Lorsque la somme du nombre de paramètres de fonction et du nombre de variables locales dépasse 256, un débordement entier se produit en raison de l'utilisation du type u8 pour le stockage. Cela conduit à accéder à des variables locales inexistantes lors des exécutions suivantes, déclenchant ainsi un panic.
Un attaquant peut construire un bloc de base en boucle, utilisant ce débordement pour changer l'état du bloc. Lors d'une nouvelle exécution, l'accès à un index de variable locale inexistant entraînera un déni de service.
Cette vulnérabilité montre que même un langage Move conçu de manière rigoureuse peut présenter des failles de sécurité pouvant être contournées. Il est conseillé aux concepteurs du langage Move d'ajouter davantage de vérifications à l'exécution pour éviter que des situations imprévues se reproduisent. À l'avenir, il sera également nécessaire de renforcer la recherche sur la sécurité du langage Move.