Une nouvelle vulnérabilité de débordement d'entier a été découverte dans le module de sécurité des références Move
Récemment, en étudiant en profondeur le langage Move, une nouvelle vulnérabilité de débordement d'entier a été découverte. Cette vulnérabilité se trouve dans le module de vérification de la sécurité des références, et son processus de déclenchement est plutôt intéressant. Cet article procédera à une analyse approfondie de cette vulnérabilité tout en introduisant des connaissances de base sur le langage Move.
Le langage Move valide les unités de code avant d'exécuter le bytecode, et l'ensemble du processus de validation se divise en 4 étapes. La vulnérabilité découverte cette fois-ci se situe dans l'étape reference_safety.
Le module de vérification de la sécurité des références est principalement responsable de la vérification de l'existence de références suspendues, de la sécurité d'accès aux références mutables et de la sécurité d'accès aux références de stockage global, etc. Le processus de vérification commence par la fonction analyze_function et effectue une vérification pour chaque bloc de base.
Dans le langage Move, un bloc de base désigne une séquence de code sans instructions de branchement, à l'exception de l'entrée et de la sortie. Le système détermine le bloc de base en parcourant le bytecode et en recherchant toutes les instructions de branchement et les séquences d'instructions de boucle.
Le langage Move 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 scanne les instructions de bytecode de chaque bloc de base dans la fonction pour déterminer si toutes les opérations de référence sont légales. Le processus de validation utilise la structure AbstractState, qui comprend deux composants : le graphique d'emprunt et les locaux, afin d'assurer la sécurité des références dans la fonction.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-6952376046c901dfae2b19d5144746b5.webp(
Au cours du processus de vérification, le système exécutera la génération de code de bloc de base post état, puis fusionnera et mettra à jour l'état du bloc avec l'état pré. Si l'état change et qu'il existe une boucle, le bloc de base sera exécuté à nouveau jusqu'à ce que l'état post soit égal à l'état pré ou qu'une erreur se produise.
![Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-92892f2a9dffea9f805f3a1952e82703.webp(
Le bogue se produit dans la fonction join_. Lorsque la longueur des paramètres ajoutée à la longueur des variables locales dépasse 256, l'utilisation du type u8 pour itérer sur les locals peut entraîner un dépassement d'entier. Bien que le langage Move ait un processus de vérification du nombre de locals, il ne vérifie que le nombre de variables locales, sans inclure la longueur des paramètres.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-1347ef8b31983109babdf8ef29270c67.webp(
Ce débordement d'entier peut entraîner une attaque par déni de service. Un attaquant peut construire un bloc de code en boucle qui exploite le débordement pour modifier l'état du bloc. Lorsque la fonction execute_block est exécutée à nouveau, si l'index requis par les instructions n'existe pas dans la nouvelle carte locals d'AbstractState, cela peut provoquer un crash du système.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-ac937ab4f426d30a476feb32520a95b4.webp(
Pour démontrer cette vulnérabilité, nous pouvons construire un bloc de base contenant des instructions de branchement inconditionnel. En définissant des paramètres appropriés et un nombre de variables locales, nous pouvons provoquer un dépassement de longueur de la carte locals à 8. Lors de la seconde exécution, tenter d'accéder à un offset inexistant entraînera un panic.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-a18dcf64108d1a75b728ffe8391100f1.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-7c8fe4e4cf376ad49d729a6f80df6f08.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-c598d61833550ec5494f9a5a4ee2a760.webp(
![Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-12c60c225a5629f6d927982a7585fc5b.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-94b0c97bb9e287ed715cddb5165f129d.webp(
![Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-095e2b585c45a86b0a689214ca673619.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-5ebaa03263f7a87edd78d146c5beadd2.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-fe905356cbee596e8aba08ec14f5d508.webp(
Cette vulnérabilité nous rappelle que même des langages soigneusement conçus peuvent présenter des risques de sécurité. Pour le langage Move, il est recommandé d'ajouter davantage de code de vérification à l'exécution afin d'éviter des situations imprévues. Actuellement, Move effectue principalement des vérifications de sécurité à la phase de vérification, mais une fois que la validation est contournée, cela peut entraîner des problèmes plus graves.
En tant que pionniers de la recherche sur la sécurité du langage Move, nous continuerons à explorer en profondeur les problèmes de sécurité connexes, contribuant ainsi à la saine développement de l'écosystème Move.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-ae25cc7d31726e2e1477e6d112b7aa75.webp(
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.
17 J'aime
Récompense
17
6
Partager
Commentaire
0/400
TokenUnlocker
· Il y a 13h
Pourquoi encore un dépassement d'entier ?
Voir l'originalRépondre0
BearMarketGardener
· Il y a 20h
move a encore eu des problèmes.
Voir l'originalRépondre0
RunWithRugs
· 08-02 18:07
Comment est-il encore sorti une faille de sécurité ?
Voir l'originalRépondre0
TestnetFreeloader
· 08-02 18:07
Encore une surface d'attaque, youpi !
Voir l'originalRépondre0
JustAnotherWallet
· 08-02 18:02
Encore une fois, il y a eu un problème, la vérification prend la responsabilité.
Le module de sécurité de référence du langage Move a découvert une nouvelle vulnérabilité de débordement d'entier.
Une nouvelle vulnérabilité de débordement d'entier a été découverte dans le module de sécurité des références Move
Récemment, en étudiant en profondeur le langage Move, une nouvelle vulnérabilité de débordement d'entier a été découverte. Cette vulnérabilité se trouve dans le module de vérification de la sécurité des références, et son processus de déclenchement est plutôt intéressant. Cet article procédera à une analyse approfondie de cette vulnérabilité tout en introduisant des connaissances de base sur le langage Move.
Le langage Move valide les unités de code avant d'exécuter le bytecode, et l'ensemble du processus de validation se divise en 4 étapes. La vulnérabilité découverte cette fois-ci se situe dans l'étape reference_safety.
Le module de vérification de la sécurité des références est principalement responsable de la vérification de l'existence de références suspendues, de la sécurité d'accès aux références mutables et de la sécurité d'accès aux références de stockage global, etc. Le processus de vérification commence par la fonction analyze_function et effectue une vérification pour chaque bloc de base.
Dans le langage Move, un bloc de base désigne une séquence de code sans instructions de branchement, à l'exception de l'entrée et de la sortie. Le système détermine le bloc de base en parcourant le bytecode et en recherchant toutes les instructions de branchement et les séquences d'instructions de boucle.
Le langage Move 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 scanne les instructions de bytecode de chaque bloc de base dans la fonction pour déterminer si toutes les opérations de référence sont légales. Le processus de validation utilise la structure AbstractState, qui comprend deux composants : le graphique d'emprunt et les locaux, afin d'assurer la sécurité des références dans la fonction.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-6952376046c901dfae2b19d5144746b5.webp(
Au cours du processus de vérification, le système exécutera la génération de code de bloc de base post état, puis fusionnera et mettra à jour l'état du bloc avec l'état pré. Si l'état change et qu'il existe une boucle, le bloc de base sera exécuté à nouveau jusqu'à ce que l'état post soit égal à l'état pré ou qu'une erreur se produise.
![Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-92892f2a9dffea9f805f3a1952e82703.webp(
Le bogue se produit dans la fonction join_. Lorsque la longueur des paramètres ajoutée à la longueur des variables locales dépasse 256, l'utilisation du type u8 pour itérer sur les locals peut entraîner un dépassement d'entier. Bien que le langage Move ait un processus de vérification du nombre de locals, il ne vérifie que le nombre de variables locales, sans inclure la longueur des paramètres.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-1347ef8b31983109babdf8ef29270c67.webp(
Ce débordement d'entier peut entraîner une attaque par déni de service. Un attaquant peut construire un bloc de code en boucle qui exploite le débordement pour modifier l'état du bloc. Lorsque la fonction execute_block est exécutée à nouveau, si l'index requis par les instructions n'existe pas dans la nouvelle carte locals d'AbstractState, cela peut provoquer un crash du système.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-ac937ab4f426d30a476feb32520a95b4.webp(
Pour démontrer cette vulnérabilité, nous pouvons construire un bloc de base contenant des instructions de branchement inconditionnel. En définissant des paramètres appropriés et un nombre de variables locales, nous pouvons provoquer un dépassement de longueur de la carte locals à 8. Lors de la seconde exécution, tenter d'accéder à un offset inexistant entraînera un panic.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-a18dcf64108d1a75b728ffe8391100f1.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-7c8fe4e4cf376ad49d729a6f80df6f08.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-c598d61833550ec5494f9a5a4ee2a760.webp(
![Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-12c60c225a5629f6d927982a7585fc5b.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-94b0c97bb9e287ed715cddb5165f129d.webp(
![Numen Cyber a découvert une nouvelle vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-095e2b585c45a86b0a689214ca673619.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-5ebaa03263f7a87edd78d146c5beadd2.webp(
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-fe905356cbee596e8aba08ec14f5d508.webp(
Cette vulnérabilité nous rappelle que même des langages soigneusement conçus peuvent présenter des risques de sécurité. Pour le langage Move, il est recommandé d'ajouter davantage de code de vérification à l'exécution afin d'éviter des situations imprévues. Actuellement, Move effectue principalement des vérifications de sécurité à la phase de vérification, mais une fois que la validation est contournée, cela peut entraîner des problèmes plus graves.
En tant que pionniers de la recherche sur la sécurité du langage Move, nous continuerons à explorer en profondeur les problèmes de sécurité connexes, contribuant ainsi à la saine développement de l'écosystème Move.
![Numen Cyber a découvert une autre vulnérabilité critique dans le langage move])https://img-cdn.gateio.im/webp-social/moments-ae25cc7d31726e2e1477e6d112b7aa75.webp(