Révélation des vulnérabilités d'overflow des entiers dans le langage Move : les dangers de la vérification du bytecode

robot
Création du résumé en cours

Analyse des vulnérabilités de débordement d'entiers dans le langage Move

Après une étude approfondie du langage Move, nous avons découvert une nouvelle vulnérabilité de débordement d'entier. Cette vulnérabilité se produit lors de la phase de vérification de la sécurité des références dans le processus de validation du bytecode du langage Move. Cet article analysera en détail le processus de déclenchement de cette vulnérabilité et explorera certains concepts clés du langage Move.

Processus de vérification des octets de code du langage Move

Le langage Move effectue une validation du code avant d'exécuter le bytecode, et cela se divise en 4 étapes. La vulnérabilité actuelle se situe dans l'étape reference_safety. Cette étape est principalement responsable de la vérification de la sécurité des références, y compris la vérification de l'existence de références pendantes et la sécurité d'accès aux références mutables, etc.

Le processus de vérification commence par l'identification des blocs de code. Un bloc de code se réfère à une séquence de code sans instructions de branchement, à l'exception des entrées et sorties. Move détermine les blocs de code en parcourant le bytecode, en recherchant toutes les instructions de branchement et les instructions de boucle.

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Sécurité des références dans Move

Move prend en charge deux types de références : référence immuable (&) et référence mutable (&mut). Le module de sécurité des références examinera les instructions de bytecode de chaque bloc de base dans la fonction, vérifiant que toutes les opérations de référence sont légales.

Le processus de validation utilise la structure AbstractState pour représenter l'état, qui comprend le graphique de prêt et les locaux. Lors de la validation, les états avant et après l'exécution sont comparés et l'état du bloc est mis à jour.

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Analyse des vulnérabilités

Le bogue se trouve dans la fonction join_. Cette fonction est utilisée pour fusionner l'état avant et après l'exécution, en mettant à jour la carte locals et le graphe des emprunts. Le problème réside dans le fait que l'itérateur locals retourne un type u8, ce qui provoque un débordement lorsque la somme de la longueur des paramètres et de la longueur des variables locales dépasse 256.

Bien que Move ait un processus de vérification du nombre de locals, il ne vérifie que le nombre de variables locales et n'inclut pas la longueur des paramètres.

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité grave dans le langage move

Exploitation de vulnérabilité

L'utilisation de ce débordement peut modifier l'état du bloc de base. Dans le code en boucle, chaque fois que le bloc de base est exécuté, l'état change. Lorsqu'il est exécuté à nouveau, si l'index accédé par l'instruction n'existe pas dans la nouvelle carte des locaux, cela provoquera une panique, permettant ainsi une attaque DoS.

Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move

Démonstration PoC

Un code PoC reproductible a été fourni, en déclenchant un dépassement d'entier en définissant des paramètres spécifiques et un nombre de variables locales, ce qui entraîne un plantage du programme.

Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Résumé

Cette faille prouve une fois de plus l'importance de l'audit de code. Pour le langage Move, il est conseillé d'ajouter davantage de vérifications de sécurité à l'exécution, et de ne pas se fier uniquement aux vérifications de la phase de validation. Nous continuerons à approfondir les questions de sécurité liées au langage Move et à contribuer à son développement.

Numen Cyber a découvert une autre vulnérabilité critique dans le langage move

Voir l'original
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.
  • Récompense
  • 7
  • Partager
Commentaire
0/400
RektButStillHerevip
· 07-11 04:35
Encore débordé, tsk tsk.
Voir l'originalRépondre0
consensus_failurevip
· 07-11 01:01
Il y a même ce bug.
Voir l'originalRépondre0
SchrodingersPapervip
· 07-09 07:32
move a encore envoyé ? Ça a mal tourné, ça a mal tourné.
Voir l'originalRépondre0
DevChivevip
· 07-08 16:28
Les débutants sont pris pour des idiots
Voir l'originalRépondre0
ProposalManiacvip
· 07-08 06:09
Il a été dit plus tôt que la validation des paramètres ne peut pas être seulement écrite dans le document.
Voir l'originalRépondre0
DegenWhisperervip
· 07-08 06:07
C'est un peu effrayant, n'est-ce pas ?
Voir l'originalRépondre0
ApeWithAPlanvip
· 07-08 05:48
move宁 a encore eu un problème
Voir l'originalRépondre0
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)