Revelación de la vulnerabilidad de desbordamiento de enteros en el lenguaje Move: riesgos en la verificación de bytecode

robot
Generación de resúmenes en curso

Análisis de vulnerabilidades por desbordamiento de enteros en el lenguaje Move

Tras una investigación exhaustiva del lenguaje Move, hemos descubierto una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad aparece en la etapa de verificación de seguridad de referencias del proceso de validación del bytecode del lenguaje Move. Este artículo analizará en detalle el proceso de activación de esta vulnerabilidad y explorará algunos conceptos clave del lenguaje Move.

Proceso de verificación de bytecode de Move

El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en 4 pasos. La vulnerabilidad en esta ocasión se presenta en el paso de reference_safety. Este paso es principalmente responsable de verificar la seguridad de las referencias, incluyendo la comprobación de si existen referencias colgantes y si el acceso a referencias mutables es seguro.

El proceso de verificación primero identificará los bloques básicos en el código. 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. Move determina los bloques básicos al recorrer el bytecode y buscar todas las instrucciones de bifurcación y de bucle.

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

Seguridad de referencia en Move

Move admite dos tipos de referencias: referencia inmutable (&) y referencia mutable (&mut). El módulo de seguridad de referencias escaneará las instrucciones de bytes de cada bloque básico en la función, verificando que todas las operaciones de referencia sean legales.

El proceso de verificación utiliza la estructura AbstractState para representar el estado, que incluye el gráfico de préstamos y los locales. Durante la verificación, se comparan los estados antes y después de la ejecución, y se fusionan para actualizar el estado del bloque.

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

Análisis de vulnerabilidades

La vulnerabilidad se presenta en la función join_. Esta función se utiliza para combinar el estado antes y después de la ejecución, actualizando el mapa de locales y el gráfico de préstamos. El problema radica en que el iterador de locales devuelve un tipo u8, lo que provoca un desbordamiento cuando la suma de la longitud del parámetro y la longitud de las variables locales supera 256.

Aunque Move tiene un proceso para verificar la cantidad de locales, solo verifica la cantidad de variables locales, sin incluir la longitud de los parámetros.

Numen Cyber descubrió otra 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 una vulnerabilidad crítica en el lenguaje move

Explotación de vulnerabilidades

Utilizando este desbordamiento se puede cambiar el estado del bloque básico. En el código de bucle, cada vez que se ejecuta el bloque básico, el estado cambia. Cuando se ejecuta de nuevo, si el índice al que accede la instrucción no existe en el nuevo mapa de locales, provocará un pánico, lo que permitirá llevar a cabo un ataque DoS.

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

Demostración de PoC

Se proporciona un código PoC reproducible que, al establecer parámetros específicos y la cantidad de variables locales, provoca un desbordamiento de enteros que causa un fallo en el programa.

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

Numen Cyber descubre en exclusiva 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 descubrió otra vulnerabilidad crítica en el lenguaje move

Resumen

Esta vulnerabilidad vuelve a demostrar la importancia de la auditoría de código. Para el lenguaje Move, se sugiere agregar más comprobaciones de seguridad en tiempo de ejecución, en lugar de depender únicamente de las comprobaciones en la fase de validación. Continuaremos investigando a fondo los problemas de seguridad del lenguaje Move y contribuiremos a su desarrollo.

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

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
  • 7
  • Compartir
Comentar
0/400
RektButStillHerevip
· 07-11 04:35
Otra vez ha desbordado, tsk tsk.
Ver originalesResponder0
consensus_failurevip
· 07-11 01:01
¿De verdad hay un bug así?
Ver originalesResponder0
SchrodingersPapervip
· 07-09 07:32
¿Movió otra vez? Se ha salido de control, se ha salido de control.
Ver originalesResponder0
DevChivevip
· 07-08 16:28
El novato fue tomado por tonto
Ver originalesResponder0
ProposalManiacvip
· 07-08 06:09
Ya se dijo que la verificación de parámetros no puede estar solo en la documentación.
Ver originalesResponder0
DegenWhisperervip
· 07-08 06:07
¿Es un poco aterrador el desbordamiento?
Ver originalesResponder0
ApeWithAPlanvip
· 07-08 05:48
move Ning ha tenido otro 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)