Analyse des vulnérabilités d'overflow d'entiers du module de sécurité des références Move
Cet article analysera en profondeur une nouvelle vulnérabilité de débordement d'entier dans le langage Move. Cette vulnérabilité se trouve dans le module de vérification de la sécurité des références et pourrait entraîner un effondrement des nœuds. Grâce à l'explication de cet article, les lecteurs auront une compréhension plus approfondie du langage Move.
Contexte de la vulnérabilité
Le langage Move effectue une vérification de code avant d'exécuter le bytecode, qui se divise en 4 étapes. Cette vulnérabilité apparaît dans l'étape de vérification de la référence de sécurité (reference_safety).
Le processus principal de vérification de sécurité est :
Identifier les blocs de code de base
Analyser chaque bloc de base
État avant et après la fusion
Propager l'état aux blocs suivants
Le point clé est de maintenir la structure AbstractState, qui contient des locaux et un graphe d'emprunt pour garantir la sécurité des références.
Détails de la vulnérabilité
Une vulnérabilité existe dans la fonction join_. Lorsque la longueur des paramètres de la fonction ajoutée à la longueur des variables locales dépasse 256, un dépassement d'entier se produit en raison de l'utilisation d'une itération de type u8.
Plus précisément :
iter_locals() renvoie un itérateur de type u8
Débordement se produit lorsque la longueur des paramètres + la longueur des variables locales > 256
Le développeur n'a vérifié que le nombre de variables locales, ignorant la longueur des paramètres.
Exploitation des vulnérabilités
On peut construire un bloc de base cyclique, en utilisant un débordement pour changer l'état :
La longueur totale des paramètres et des variables locales doit être supérieure à 256
Après la première exécution, la longueur des nouveaux locals déborde et devient plus petite.
Lors de l'exécution à nouveau, l'accès à un index locals inexistant entraîne un panic.
Démonstration PoC
Il fournit un code PoC reproductible, comprenant un bloc de base en boucle infinie. En réglant les paramètres appropriés et la longueur des variables locales, un DoS peut être déclenché.
Conclusion
Cette faille souligne à nouveau :
Il n'y a pas de code absolument sûr.
L'importance de l'audit de code
Le runtime de Move nécessite plus de vérifications de sécurité.
La validation statique peut être contournée, la sécurité à l'exécution est tout aussi importante.
En tant que leader de la recherche sur la sécurité du langage Move, nous continuerons à explorer en profondeur les problèmes de sécurité connexes et à partager nos résultats de recherche avec la communauté.
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.
21 J'aime
Récompense
21
8
Partager
Commentaire
0/400
WhaleMinion
· 07-26 05:03
Les attaques par dépassement de capacité sont arrivées.
Voir l'originalRépondre0
MevTears
· 07-24 04:19
Qui a écrit ce code, il faut le vérifier dix fois.
Voir l'originalRépondre0
GasFeeCryer
· 07-23 13:34
Les vulnérabilités peuvent être exploitées, et il y a des attaques par déni de service, c'est agréable.
Voir l'originalRépondre0
TopEscapeArtist
· 07-23 05:47
Faire des erreurs est le quotidien d'un marché baissier, il faut être prudent même en déplaçant des briques.
Voir l'originalRépondre0
TokenomicsTherapist
· 07-23 05:45
Ce bug est vraiment effrayant.
Voir l'originalRépondre0
TxFailed
· 07-23 05:43
mdr classique débordement d'entier... j'ai appris cela de la manière coûteuse à vrai dire
Voir l'originalRépondre0
SchrödingersNode
· 07-23 05:40
Ça me rend nerveux, pourquoi ai-je tant de problèmes?
Voir l'originalRépondre0
AltcoinMarathoner
· 07-23 05:40
hodling à travers la tempête de dépassement d'entier... juste un autre jalon dans le web3 ultra
Analyse approfondie de la vulnérabilité de débordement d'entier du module de sécurité du langage Move
Analyse des vulnérabilités d'overflow d'entiers du module de sécurité des références Move
Cet article analysera en profondeur une nouvelle vulnérabilité de débordement d'entier dans le langage Move. Cette vulnérabilité se trouve dans le module de vérification de la sécurité des références et pourrait entraîner un effondrement des nœuds. Grâce à l'explication de cet article, les lecteurs auront une compréhension plus approfondie du langage Move.
Contexte de la vulnérabilité
Le langage Move effectue une vérification de code avant d'exécuter le bytecode, qui se divise en 4 étapes. Cette vulnérabilité apparaît dans l'étape de vérification de la référence de sécurité (reference_safety).
Le processus principal de vérification de sécurité est :
Le point clé est de maintenir la structure AbstractState, qui contient des locaux et un graphe d'emprunt pour garantir la sécurité des références.
Détails de la vulnérabilité
Une vulnérabilité existe dans la fonction join_. Lorsque la longueur des paramètres de la fonction ajoutée à la longueur des variables locales dépasse 256, un dépassement d'entier se produit en raison de l'utilisation d'une itération de type u8.
Plus précisément :
Exploitation des vulnérabilités
On peut construire un bloc de base cyclique, en utilisant un débordement pour changer l'état :
Démonstration PoC
Il fournit un code PoC reproductible, comprenant un bloc de base en boucle infinie. En réglant les paramètres appropriés et la longueur des variables locales, un DoS peut être déclenché.
Conclusion
Cette faille souligne à nouveau :
En tant que leader de la recherche sur la sécurité du langage Move, nous continuerons à explorer en profondeur les problèmes de sécurité connexes et à partager nos résultats de recherche avec la communauté.