La langue Move présente à nouveau une vulnérabilité critique : le dépassement d'entier peut entraîner un effondrement du Nœud
Récemment, des chercheurs en sécurité ont découvert une nouvelle vulnérabilité de dépassement d'entier lors de l'analyse approfondie d'Aptos Moveevm. Cette vulnérabilité existe dans le processus de vérification de la sécurité des références du langage Move, ce qui pourrait entraîner un crash du Nœud.
Le langage Move effectue une vérification du code avant l'exécution du bytecode, divisée en 4 étapes. Cette vulnérabilité se produit 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, etc.
Le processus de vérification parcourra chaque bloc de base et procédera à son analyse. Un bloc de base désigne 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 recherchant des instructions de branchement et de boucle.
Lors de la vérification de la sécurité des références, une structure AbstractState est maintenue, contenant des informations sur le graphique d'emprunt et les locaux. Le processus de vérification exécutera le code des blocs fondamentaux, générera l'état après exécution, puis fusionnera cet état avec l'état avant exécution, mettra à jour l'état du bloc et le propagera aux blocs suivants.
Une vulnérabilité se trouve dans la fonction join_. Cette fonction est utilisée pour fusionner l'état avant et après l'exécution, mettre à jour les locaux et le graphique des emprunts. Lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, l'utilisation du type u8 pour itérer sur les locaux peut entraîner un débordement d'entier.
L'utilisation de ce débordement peut modifier l'état du bloc de base. Dans le cas de code avec des boucles, l'exécution répétée du même bloc de base peut accéder à des indices locaux inexistants, provoquant ainsi un panic entraînant l'effondrement du Nœud.
Les chercheurs ont fourni un code PoC qui déclenche un dépassement d'entier en configurant des paramètres spécifiques et un nombre de variables locales, entraînant finalement un panic.
Cette vulnérabilité révèle que même des langages axés sur la sécurité comme Move peuvent avoir des failles. Il est conseillé aux concepteurs du langage Move d'ajouter davantage de vérifications de sécurité à l'exécution, au lieu de se fier uniquement aux contrôles 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.
16 J'aime
Récompense
16
2
Reposter
Partager
Commentaire
0/400
BlockchainDecoder
· 08-08 08:49
La vérification des citations est trop fragile
Voir l'originalRépondre0
Hash_Bandit
· 08-06 01:22
Les problèmes de sécurité doivent être pris au sérieux.
Vulnérabilité de dépassement d'entier dans le langage Move : des risques de vérification de sécurité restent présents.
La langue Move présente à nouveau une vulnérabilité critique : le dépassement d'entier peut entraîner un effondrement du Nœud
Récemment, des chercheurs en sécurité ont découvert une nouvelle vulnérabilité de dépassement d'entier lors de l'analyse approfondie d'Aptos Moveevm. Cette vulnérabilité existe dans le processus de vérification de la sécurité des références du langage Move, ce qui pourrait entraîner un crash du Nœud.
Le langage Move effectue une vérification du code avant l'exécution du bytecode, divisée en 4 étapes. Cette vulnérabilité se produit 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, etc.
Le processus de vérification parcourra chaque bloc de base et procédera à son analyse. Un bloc de base désigne 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 recherchant des instructions de branchement et de boucle.
Lors de la vérification de la sécurité des références, une structure AbstractState est maintenue, contenant des informations sur le graphique d'emprunt et les locaux. Le processus de vérification exécutera le code des blocs fondamentaux, générera l'état après exécution, puis fusionnera cet état avec l'état avant exécution, mettra à jour l'état du bloc et le propagera aux blocs suivants.
Une vulnérabilité se trouve dans la fonction join_. Cette fonction est utilisée pour fusionner l'état avant et après l'exécution, mettre à jour les locaux et le graphique des emprunts. Lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, l'utilisation du type u8 pour itérer sur les locaux peut entraîner un débordement d'entier.
L'utilisation de ce débordement peut modifier l'état du bloc de base. Dans le cas de code avec des boucles, l'exécution répétée du même bloc de base peut accéder à des indices locaux inexistants, provoquant ainsi un panic entraînant l'effondrement du Nœud.
Les chercheurs ont fourni un code PoC qui déclenche un dépassement d'entier en configurant des paramètres spécifiques et un nombre de variables locales, entraînant finalement un panic.
Cette vulnérabilité révèle que même des langages axés sur la sécurité comme Move peuvent avoir des failles. Il est conseillé aux concepteurs du langage Move d'ajouter davantage de vérifications de sécurité à l'exécution, au lieu de se fier uniquement aux contrôles de la phase de validation. Cela souligne également l'importance de l'audit de code.