Le module de sécurité des citations Move a découvert une vulnérabilité de dépassement d'entier pouvant entraîner une attaque par déni de service.

robot
Création du résumé en cours

Le module de sécurité de référence Move a découvert une nouvelle vulnérabilité de débordement d'entier

Récemment, des chercheurs ont découvert une nouvelle vulnérabilité de dépassement d'entier lors de l'analyse approfondie du langage Move. Cette vulnérabilité existe dans le module de sécurité des références et pourrait entraîner des attaques par déni de service graves. Cet article présentera en détail le processus de découverte de cette vulnérabilité et ses détails techniques.

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

Mécanisme de sécurité des références dans le langage Move

Le langage Move s'inspire des idées de Rust et prend en charge deux types de références : la référence immuable (&) et la référence mutable (&mut). Le module de sécurité des références valide la légitimité de toutes les opérations de référence en scannant les blocs de base et les instructions de bytecode dans les fonctions.

Le processus de vérification comprend principalement les étapes suivantes :

  1. Analyser chaque bloc de base
  2. Exécuter le code de bloc de base pour générer l'état postérieur
  3. Fusionner l'état pré et l'état post
  4. Mettre à jour l'état des blocs et le propager aux blocs suivants

Parmi ceux-ci, l'état contient deux composants clés, locals et borrow graph, qui sont utilisés pour garantir la sécurité des références dans la fonction.

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

Détails de la vulnérabilité

Cette vulnérabilité se produit dans la fonction join_ qui fait appel au module de sécurité. Lorsque la somme de la longueur des paramètres de la fonction et de la longueur des variables locales est supérieure à 256, l'utilisation du type u8 pour itérer sur les locals peut entraîner un dépassement d'entier.

Plus précisément :

  • iter_locals() renvoie un itérateur de type u8
  • Lorsque la longueur des paramètres + la longueur des variables locales > 256, il y aura un dépassement.
  • Les développeurs semblent réaliser qu'il est nécessaire de vérifier cela, mais le code réel ne vérifie que le nombre de variables locales.

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

Exploitation de vulnérabilités

En utilisant cette vulnérabilité, il est possible de construire un bloc de code en boucle :

  1. Déclenchement d'un dépassement lors de la première exécution, modification de la carte des locaux.
  2. Accès à un index locals inexistant lors de la deuxième exécution, ce qui provoque un panic.

Cela peut provoquer un effondrement des nœuds, entraînant une attaque par déni de service.

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

Reproduction de vulnérabilité

Les chercheurs ont fourni un PoC pour reproduire cette vulnérabilité :

  1. Définissez parameters et locals tous deux comme SignatureIndex(0), et faites que num_locals soit 264
  2. Après la première exécution, la longueur de la nouvelle carte des locaux passe à 8
  3. Lors de la deuxième exécution, copyloc(57) accède à un offset inexistant, ce qui entraîne un panic.

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

Découverte exclusive de Numen Cyber d'une nouvelle 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 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

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

Résumé et suggestions

Cette vulnérabilité indique :

  1. Il n'existe pas de code absolument sécurisé, la vérification statique peut être contournée.
  2. L'audit de code est très important, il peut révéler les négligences des développeurs.
  3. Le langage Move devrait ajouter des vérifications à l'exécution, et ne pas se contenter de s'appuyer sur les vérifications de sécurité de la phase de validation.

Les chercheurs appellent les concepteurs du langage Move à renforcer les mécanismes de sécurité à l'exécution pour empêcher que des vulnérabilités similaires ne soient exploitées, entraînant des problèmes plus graves.

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

Voir l'original
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.
  • Récompense
  • 7
  • Partager
Commentaire
0/400
SmartContractWorkervip
· Il y a 8h
C'est encore sorti du pot, ça doit être fatiguant de le réparer.
Voir l'originalRépondre0
staking_grampsvip
· 07-06 05:24
Ce bug est vraiment amateur, non ?
Voir l'originalRépondre0
ChainMaskedRidervip
· 07-06 05:22
La compétence en écriture de code n'est-elle pas trop grossière ?
Voir l'originalRépondre0
MissedTheBoatvip
· 07-06 05:20
Encore une faille, Move n'est pas si génial.
Voir l'originalRépondre0
GateUser-c799715cvip
· 07-06 05:19
Qui a écrit ce code ? Il est tellement mauvais.
Voir l'originalRépondre0
YieldChaservip
· 07-06 05:17
u8 a encore un problème
Voir l'originalRépondre0
BridgeJumpervip
· 07-06 05:09
Développement non conforme, deux lignes de larmes pour corriger des bugs.
Voir l'originalRépondre0
  • Épingler
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)