Le module de sécurité des références Move présente une vulnérabilité de débordement d'entier
Récemment, des chercheurs en sécurité ont découvert une grave vulnérabilité d'overflow d'entier lors de l'analyse approfondie du langage Move. Cette vulnérabilité se trouve dans le module de vérification de sécurité des références et pourrait entraîner des attaques par déni de service. Cet article expliquera en détail le principe et l'impact de cette vulnérabilité.
Contexte de la vulnérabilité
Le langage Move effectue une vérification du code avant l'exécution du bytecode, y compris un contrôle de la sécurité des références. Ce processus se divise en plusieurs étapes, et la vulnérabilité découverte se situe à la phase de vérification de la sécurité des références.
Le principal processus de vérification de la sécurité est :
Diviser le code en blocs de base
Analyser chaque bloc de base
État avant et après l'analyse de fusion
Propager le résultat aux blocs suivants
Une structure AbstractState est utilisée pour représenter l'état d'analyse, contenant des informations sur les locaux et le graphique d'emprunt.
Détails de la vulnérabilité
La vulnérabilité se trouve dans la fonction join_ de l'état d'analyse de fusion. Cette fonction itère sur les locaux avec le type u8, mais si la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, un dépassement d'entier se produit.
Plus précisément :
utiliser self.iter_locals() pour itérer sur les locaux dans la fonction join_
iter_locals() retourne un itérateur de type u8
Si la longueur des paramètres + la longueur des variables locales > 256, l'itérateur débordera.
Bien que Move ait un processus de vérification du nombre de locaux, il ne vérifie que le nombre de variables locales, sans inclure la longueur des paramètres.
Exploitation des vulnérabilités
Un attaquant peut construire un bloc de code en boucle, en utilisant un dépassement pour modifier l'état du bloc:
Nombre total de paramètres et de variables locales > 256
Après la première exécution, la longueur de la nouvelle carte des locaux va débordement et devenir plus petite.
Lors d'une nouvelle exécution, l'accès à un index locals inexistant entraînera un panic.
Cela pourrait provoquer un refus de service par le nœud.
Impact des vulnérabilités
Cette vulnérabilité peut entraîner :
Le vérificateur de bytecode Move s'est écrasé
Les nœuds de blockchain dépendant de Move refusent le service
Contourner certaines vérifications de sécurité
Suggestions de réparation
Ajouter une vérification de la longueur des paramètres dans le contrôle des frontières des locaux.
Utilisez des types d'entiers plus grands comme u16 pour itérer les locaux.
Ajouter des vérifications de sécurité supplémentaires lors de l'exécution
Résumé
Cette vulnérabilité démontre une fois de plus que même les langages conçus de manière rigoureuse peuvent présenter des failles de sécurité. Pour le langage Move, il est recommandé d'ajouter des vérifications de sécurité nécessaires non seulement à l'étape de validation, mais aussi au moment de l'exécution. Les chercheurs en sécurité continueront d'analyser en profondeur le langage Move afin de découvrir d'autres problèmes potentiels.
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.
22 J'aime
Récompense
22
6
Reposter
Partager
Commentaire
0/400
BackrowObserver
· 08-11 11:51
move a encore une fois échoué
Voir l'originalRépondre0
MidnightTrader
· 08-10 07:32
C'est encore quel débutant qui a écrit ce code, je suis à genoux.
Voir l'originalRépondre0
MevShadowranger
· 08-10 07:30
Encore en train de jouer avec le débordement d'entiers
Voir l'originalRépondre0
WagmiOrRekt
· 08-10 07:29
Encore heureux que j'ai fermé toutes les positions Move auparavant.
Voir l'originalRépondre0
CommunityWorker
· 08-10 07:27
move va-t-il encore exploser ? Pourquoi s'inquiéter ?
Voir l'originalRépondre0
CryingOldWallet
· 08-10 07:26
Encore une faille ? move n'est plus si attrayant, n'est-ce pas ?
La vulnérabilité du dépassement d'entier dans le module de sécurité de Move peut entraîner un déni de service du Nœud.
Le module de sécurité des références Move présente une vulnérabilité de débordement d'entier
Récemment, des chercheurs en sécurité ont découvert une grave vulnérabilité d'overflow d'entier lors de l'analyse approfondie du langage Move. Cette vulnérabilité se trouve dans le module de vérification de sécurité des références et pourrait entraîner des attaques par déni de service. Cet article expliquera en détail le principe et l'impact de cette vulnérabilité.
Contexte de la vulnérabilité
Le langage Move effectue une vérification du code avant l'exécution du bytecode, y compris un contrôle de la sécurité des références. Ce processus se divise en plusieurs étapes, et la vulnérabilité découverte se situe à la phase de vérification de la sécurité des références.
Le principal processus de vérification de la sécurité est :
Une structure AbstractState est utilisée pour représenter l'état d'analyse, contenant des informations sur les locaux et le graphique d'emprunt.
Détails de la vulnérabilité
La vulnérabilité se trouve dans la fonction join_ de l'état d'analyse de fusion. Cette fonction itère sur les locaux avec le type u8, mais si la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256, un dépassement d'entier se produit.
Plus précisément :
Bien que Move ait un processus de vérification du nombre de locaux, il ne vérifie que le nombre de variables locales, sans inclure la longueur des paramètres.
Exploitation des vulnérabilités
Un attaquant peut construire un bloc de code en boucle, en utilisant un dépassement pour modifier l'état du bloc:
Cela pourrait provoquer un refus de service par le nœud.
Impact des vulnérabilités
Cette vulnérabilité peut entraîner :
Suggestions de réparation
Résumé
Cette vulnérabilité démontre une fois de plus que même les langages conçus de manière rigoureuse peuvent présenter des failles de sécurité. Pour le langage Move, il est recommandé d'ajouter des vérifications de sécurité nécessaires non seulement à l'étape de validation, mais aussi au moment de l'exécution. Les chercheurs en sécurité continueront d'analyser en profondeur le langage Move afin de découvrir d'autres problèmes potentiels.