Se ha descubierto una nueva vulnerabilidad de desbordamiento de enteros en la verificación de seguridad de la referencia de Move.

robot
Generación de resúmenes en curso

Se ha descubierto una nueva vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencia del lenguaje Move

Recientemente, al investigar a fondo el lenguaje Move, descubrimos una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad se presenta durante el proceso de verificación de seguridad de referencias, involucrando algunos mecanismos clave del lenguaje Move. Al analizar esta vulnerabilidad, podemos comprender más a fondo el diseño y la implementación del lenguaje Move.

Proceso de verificación del lenguaje Move

El lenguaje Move valida las unidades de código antes de ejecutar el bytecode, y este proceso se divide en 4 pasos. La vulnerabilidad descubierta en esta ocasión se encuentra en el paso reference_safety.

El módulo reference_safety define las funciones centrales para validar la seguridad de las referencias. Principalmente, verifica si existen referencias colgantes, si el acceso a referencias mutables es seguro, si el acceso a referencias de almacenamiento global es seguro, entre otros problemas.

La función de entrada del proceso de verificación llamará a analyze_function para analizar cada función. analyze_function validará cada bloque básico dentro de la función. 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.

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

Seguridad de referencias en el lenguaje Move

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 módulo de verificación de seguridad escaneará las instrucciones de bytecode de cada bloque básico en la función para determinar si todas las operaciones de referencia son legales. El proceso de verificación incluye principalmente:

  1. Ejecutar el código del bloque básico
  2. Estado antes y después de la ejecución de la fusión
  3. Actualizar el estado del bloque
  4. Propagar las condiciones posteriores a los bloques siguientes

Este proceso es similar a la idea del Sea of Nodes en el V8 turbofan.

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

Análisis de vulnerabilidades

La vulnerabilidad aparece en el proceso de estado antes y después de la ejecución de la fusión. Cuando la longitud de los parámetros de la función más la longitud de las variables locales es mayor que 256, el uso del tipo u8 para representar el índice de la variable local puede llevar a un desbordamiento de enteros.

Aunque el lenguaje Move tiene un proceso para verificar el número de variables locales, esta verificación no incluye la longitud de los parámetros. Los desarrolladores parecen haber reconocido la necesidad de verificar la suma de los parámetros y las variables locales, pero en el código real solo se verifica el número de variables locales.

Este desbordamiento de enteros puede provocar un ataque de denegación de servicio ( DoS ). Un atacante puede construir un bloque de código en bucle que aproveche el desbordamiento para cambiar el estado del bloque. Cuando se ejecuta nuevamente el bloque básico, si el índice que necesita acceder a la instrucción no existe en el nuevo estado, hará que el programa se bloquee.

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

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

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica del lenguaje move

Numen Cyber descubre una 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 del lenguaje move

Numen Cyber descubre otro 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

Explotación de vulnerabilidades

Hemos construido una prueba de concepto (PoC) para demostrar esta vulnerabilidad:

  1. Crear un bloque básico que contenga instrucciones de bifurcación incondicional, para que se ejecute varias veces.
  2. Establecer el número total de parámetros y variables locales en 264, lo que provoca que la longitud del nuevo mapeo de variables locales se desborde en 8.
  3. Al ejecutar nuevamente el bloque básico, se intenta acceder a un índice de variable local que no existe, lo que provoca un pánico.

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

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

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

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

Conclusión

Esta vulnerabilidad demuestra una vez más que no hay código absolutamente seguro. Aunque el lenguaje Move realiza una verificación estática antes de la ejecución, aún puede ser eludido por una vulnerabilidad de desbordamiento de enteros.

Para el futuro desarrollo del lenguaje Move, recomendamos:

  1. Agregar más código de verificación en tiempo de ejecución para prevenir situaciones inesperadas.
  2. No solo confíes en las verificaciones de seguridad de la fase de validación, sino que también debes realizar un endurecimiento de seguridad durante la fase de ejecución.

Como pioneros en la investigación de seguridad del lenguaje Move, continuaremos profundizando en los problemas de seguridad de Move y contribuyendo a su desarrollo.

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
  • 3
  • Compartir
Comentar
0/400
SnapshotLaborervip
· 07-12 19:35
¿Ya fuiste a reportar un bug después de cinco minutos de aprendizaje?
Ver originalesResponder0
RadioShackKnightvip
· 07-12 19:26
mover barro no ayuda
Ver originalesResponder0
LayerZeroHerovip
· 07-12 19:17
Hay que ser sinceros, move no es tan impresionante.
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)