El módulo de seguridad de referencia de Move presenta una vulnerabilidad de desbordamiento de enteros que podría provocar un ataque de Denegación de Servicio (DoS).

robot
Generación de resúmenes en curso

Análisis de la vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de referencias de Move

Recientemente, al investigar a fondo Aptos Moveevm, descubrimos una nueva vulnerabilidad de desbordamiento de enteros. El proceso de activación de esta vulnerabilidad es bastante interesante, a continuación, analizaremos en profundidad esta vulnerabilidad y aprovecharemos la oportunidad para explorar algunos conceptos clave del lenguaje Move.

El lenguaje Move realiza una verificación de unidades de código antes de ejecutar el bytecode, y este proceso se divide en cuatro pasos. La vulnerabilidad discutida en este artículo aparece en el paso de reference_safety.

El módulo reference_safety se encarga principalmente de verificar la seguridad de las referencias en el código, 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 conforme, entre otros.

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

Durante el proceso de verificación de seguridad, el sistema analizará cada bloque básico. Un bloque básico se refiere a una secuencia de código que no tiene instrucciones de bifurcación, excepto en la entrada y la salida. El lenguaje Move identifica bloques básicos al recorrer el código de bytes y buscar todas las instrucciones de bifurcación y secuencias de instrucciones de bucle.

El lenguaje Move admite dos tipos de referencias: referencias inmutables (&) y referencias mutables (&mut). Las referencias inmutables se utilizan para leer datos, mientras que las referencias mutables se utilizan para modificar datos. Este diseño ayuda a mejorar la seguridad y la legibilidad del código.

El proceso principal de verificación de seguridad de referencias incluye: escanear los bloques básicos en la función, analizar las instrucciones de bytecode y determinar si todas las operaciones de referencia son legales. Este proceso utiliza la estructura AbstractState, que contiene el gráfico de préstamos y los locales, asegurando conjuntamente la seguridad de las referencias en la función.

Numen Cyber descubrió de forma exclusiva otra vulnerabilidad crítica en el lenguaje move

Durante el proceso de verificación, se compararán los estados antes y después de la ejecución del bloque básico (pre state y post state ), y los resultados se combinarán para actualizar el estado del bloque. Si el estado cambia y el bloque actual tiene un borde hacia atrás que apunta a sí mismo (lo que indica que hay un ciclo), se volverá a ejecutar el bloque básico hasta que el estado no cambie más o se produzca un error.

La vulnerabilidad se produce en el proceso de determinar si el resultado de join ha cambiado. Cuando la suma de la longitud de los parámetros de la función y la longitud de las variables locales excede 256, el uso del tipo u8 para representar el índice local puede provocar un desbordamiento de enteros. Aunque el lenguaje Move tiene un proceso de verificación de la cantidad de locales, solo verifica la cantidad de variables locales y no incluye la longitud de los parámetros.

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

Esta vulnerabilidad de desbordamiento de enteros puede provocar un ataque de denegación de servicio ( DoS ). Un atacante puede construir un bloque de código en bucle, aprovechando el desbordamiento para cambiar el estado del bloque, de modo que el nuevo mapa de locales sea diferente del anterior. Al volver a ejecutar la función execute_block, si el índice que la instrucción necesita acceder no existe en el nuevo mapa de locales de AbstractState, provocará un panic, lo que hará que todo el nodo se bloquee.

Para demostrar esta vulnerabilidad, proporcionamos un PoC que se puede reproducir en git. Este PoC contiene un bloque básico con una instrucción de salto incondicional que puede activar repetidamente las funciones execute_block y join. Al ajustar cuidadosamente los parámetros y la cantidad de variables locales, se puede reducir la longitud del nuevo mapa de locales a 8, lo que provoca un pánico en la segunda ejecución.

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

Esta vulnerabilidad demuestra una vez más que no hay código absolutamente seguro. A pesar de que el lenguaje Move realiza una rigurosa verificación estática antes de la ejecución, aún puede ser eludido por vulnerabilidades de desbordamiento. Esto también subraya la importancia de la auditoría de código y la necesidad de incorporar comprobaciones de seguridad en tiempo de ejecución en el diseño del lenguaje.

Como líder en la investigación de seguridad del lenguaje Move, continuaremos investigando a fondo los problemas de seguridad de Move y sugeriremos a los diseñadores del lenguaje que añadan más código de verificación en el tiempo de ejecución de Move para prevenir situaciones inesperadas. Actualmente, el lenguaje Move realiza comprobaciones de seguridad principalmente en la fase de verificación, pero creemos que esto no es suficiente. Una vez que la verificación es eludida, la falta de refuerzo de seguridad adecuado en la fase de ejecución puede llevar a problemas más graves.

Numen Cyber descubre exclusivamente otra alta vulnerabilidad en el lenguaje move

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

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

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

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

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

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

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

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

Numen Cyber descubre un nuevo y grave agujero de seguridad en el lenguaje move

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

Ver originales
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.
  • Recompensa
  • 5
  • Compartir
Comentar
0/400
FUD_Whisperervip
· 07-08 18:40
¿Por qué todavía hay tantas vulnerabilidades? Esto afecta la mentalidad.
Ver originalesResponder0
LadderToolGuyvip
· 07-06 19:13
Hay bastantes bugs de desbordamiento.
Ver originalesResponder0
MetaverseMigrantvip
· 07-06 17:57
Me hace sentir como si volviera a probar Solana en 2021.
Ver originalesResponder0
ETHReserveBankvip
· 07-06 17:45
move ya no es atractivo
Ver originalesResponder0
RuntimeErrorvip
· 07-06 17:32
Ya había notado el problema.
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)