Se descubre una vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de Move, que podría provocar un ataque DoS.

Se ha encontrado una nueva vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de referencia de Move

Recientemente, al investigar a fondo el lenguaje Move, hemos descubierto una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad existe en el proceso de verificación de seguridad de referencias, y su proceso de activación es bastante interesante. Este artículo analizará en profundidad esta vulnerabilidad y explorará algunos conocimientos de fondo sobre el lenguaje Move.

El lenguaje Move realiza una validación de unidades de código antes de ejecutar el bytecode, que se divide en cuatro pasos. Esta vulnerabilidad se presenta en el paso reference_safety. Este paso es responsable de verificar la seguridad de las referencias, incluyendo la comprobación de si existen referencias colgantes, si el acceso a referencias mutables es seguro, y si el acceso a referencias de almacenamiento global es seguro, etc.

Numen Cyber descubre otra vulnerabilidad crítica en el lenguaje move

La función de entrada que invoca la verificación de seguridad llamará a analyze_function para validar cada bloque básico. Un bloque básico se refiere a una secuencia de código que no tiene instrucciones de bifurcación excepto las de entrada y salida. El lenguaje Move identifica bloques básicos al recorrer el bytecode y buscar todas las instrucciones de bifurcación y las secuencias de instrucciones de bucle.

Numen Cyber descubre otra vulnerabilidad crítica en el lenguaje move

El lenguaje Move admite dos tipos de referencias: referencias inmutables (&) y referencias mutables (&mut). El módulo de seguridad de referencias verifica la legalidad de todas las operaciones de referencia escaneando las instrucciones de bytes de los bloques básicos en la función. El proceso de verificación utiliza la estructura AbstractState, que contiene el gráfico de préstamos y locales, para garantizar la seguridad de las referencias en la función.

Numen Cyber descubrió exclusivamente otra vulnerabilidad crítica en el lenguaje move

La vulnerabilidad se encuentra en la función join_. Cuando la longitud de los parámetros más la longitud de las variables locales supera 256, la función iter_locals() devuelve un iterador de tipo u8, lo que provoca un desbordamiento de enteros. Aunque Move tiene un proceso de verificación del número de locales, en el módulo de verificación de límites solo se verifican los locales, sin incluir la longitud de los parámetros.

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Este desbordamiento de entero puede provocar un ataque de denegación de servicio (DoS). Cuando hay un bloque de código en bucle y se aprovecha el desbordamiento para cambiar el estado del bloque, el nuevo mapa de locales es diferente al anterior. Al volver a ejecutar la función execute_block, si el índice que necesita acceder a la instrucción no existe en el nuevo mapa de AbstractState locals, provocará un DoS.

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Hemos proporcionado un PoC que se puede reproducir en git. El bloque de código en este PoC contiene una instrucción de salto incondicional que, cada vez que se ejecuta la última instrucción, salta de nuevo a la primera instrucción, lo que provoca múltiples llamadas a las funciones execute_block y join.

Numen Cyber descubrió una vulnerabilidad crítica en el lenguaje move

Esta vulnerabilidad demuestra que incluso lenguajes enfocados en la seguridad como Move pueden tener riesgos de seguridad. La importancia de la auditoría de código es evidente, y los programadores inevitablemente pueden cometer descuidos. Como líderes en la investigación de seguridad del lenguaje Move, continuaremos investigando a fondo los problemas de seguridad de Move.

Sugerimos que los diseñadores del lenguaje Move agreguen más código de verificación en tiempo de ejecución para prevenir situaciones inesperadas. Actualmente, Move realiza verificaciones de seguridad principalmente en la fase de verificación, pero esto puede no ser suficiente. Una vez que se elude la verificación, la falta de suficiente endurecimiento de seguridad en la fase de ejecución puede llevar a problemas más graves.

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubrió exclusivamente otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre en exclusiva otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre una nueva vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre en exclusiva otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre un nuevo y grave fallo en el lenguaje move

Numen Cyber descubrió una nueva vulnerabilidad crítica en el lenguaje move

MOVE1.62%
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 5
  • Republicar
  • Compartir
Comentar
0/400
GasFeeWhisperervip
· 08-16 04:23
move se ha caído nuevamente
Ver originalesResponder0
StopLossMastervip
· 08-16 03:33
Otra vez es un agujero que cavaron los de casa.
Ver originalesResponder0
LiquidationWatchervip
· 08-16 03:31
De nuevo ha salido un fallo.
Ver originalesResponder0
ZKProofEnthusiastvip
· 08-16 03:28
Este bug se ha convertido en un gran problema.
Ver originalesResponder0
ZenMinervip
· 08-16 03:08
Está envenenado, move va a tener que aplicar otro parche.
Ver originalesResponder0
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)