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.
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 :
Analyser chaque bloc de base
Exécuter le code de bloc de base pour générer l'état postérieur
Fusionner l'état pré et l'état post
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.
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.
Exploitation de vulnérabilités
En utilisant cette vulnérabilité, il est possible de construire un bloc de code en boucle :
Déclenchement d'un dépassement lors de la première exécution, modification de la carte des locaux.
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.
Reproduction de vulnérabilité
Les chercheurs ont fourni un PoC pour reproduire cette vulnérabilité :
Définissez parameters et locals tous deux comme SignatureIndex(0), et faites que num_locals soit 264
Après la première exécution, la longueur de la nouvelle carte des locaux passe à 8
Lors de la deuxième exécution, copyloc(57) accède à un offset inexistant, ce qui entraîne un panic.
Résumé et suggestions
Cette vulnérabilité indique :
Il n'existe pas de code absolument sécurisé, la vérification statique peut être contournée.
L'audit de code est très important, il peut révéler les négligences des développeurs.
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.
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.
14 J'aime
Récompense
14
7
Partager
Commentaire
0/400
SmartContractWorker
· Il y a 8h
C'est encore sorti du pot, ça doit être fatiguant de le réparer.
Voir l'originalRépondre0
staking_gramps
· 07-06 05:24
Ce bug est vraiment amateur, non ?
Voir l'originalRépondre0
ChainMaskedRider
· 07-06 05:22
La compétence en écriture de code n'est-elle pas trop grossière ?
Voir l'originalRépondre0
MissedTheBoat
· 07-06 05:20
Encore une faille, Move n'est pas si génial.
Voir l'originalRépondre0
GateUser-c799715c
· 07-06 05:19
Qui a écrit ce code ? Il est tellement mauvais.
Voir l'originalRépondre0
YieldChaser
· 07-06 05:17
u8 a encore un problème
Voir l'originalRépondre0
BridgeJumper
· 07-06 05:09
Développement non conforme, deux lignes de larmes pour corriger des bugs.
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.
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.
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 :
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.
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 :
Exploitation de vulnérabilités
En utilisant cette vulnérabilité, il est possible de construire un bloc de code en boucle :
Cela peut provoquer un effondrement des nœuds, entraînant une attaque par déni de service.
Reproduction de vulnérabilité
Les chercheurs ont fourni un PoC pour reproduire cette vulnérabilité :
Résumé et suggestions
Cette vulnérabilité indique :
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.