Se encuentra otra vulnerabilidad crítica en el lenguaje Move: el desbordamiento de enteros puede provocar el colapso del Nodo
Recientemente, investigadores de seguridad han realizado un análisis exhaustivo del lenguaje Move y han descubierto una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad se presenta durante el proceso de verificación de seguridad de referencias del lenguaje Move, lo que podría provocar el colapso del nodo.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en cuatro pasos. La vulnerabilidad descubierta se encuentra en el paso de reference_safety. Este paso se utiliza principalmente para verificar la seguridad de las referencias, incluyendo la comprobación de si existen referencias colgantes y si el acceso a referencias mutables es seguro, entre otros.
La activación de la vulnerabilidad está relacionada con el concepto de bloques básicos en el lenguaje Move. Un bloque básico es una secuencia de código que no tiene instrucciones de bifurcación, excepto para la entrada y la salida. Move identifica bloques básicos al recorrer el bytecode y buscar instrucciones de bifurcación.
Durante el proceso de verificación de seguridad de las referencias, el sistema escaneará las instrucciones de bytecode en cada bloque básico y determinará si todas las operaciones de referencia son legales. Este proceso utiliza la estructura AbstractState, que contiene dos componentes importantes: el grafo de préstamo y los locales.
La vulnerabilidad se presenta en la función join_. Cuando la suma de la longitud de los parámetros y la longitud de las variables locales supera 256, puede ocurrir un desbordamiento de enteros debido al uso del tipo u8 para representar el índice local. Aunque Move tiene un mecanismo para verificar el número de locals, no incluye la longitud de los parámetros.
Aprovechando esta vulnerabilidad de desbordamiento, un atacante puede construir un bloque de código en bucle que cambie el estado del bloque. Cuando se ejecuta nuevamente el bloque básico, si el índice que la instrucción necesita acceder no existe en el nuevo mapa de locales, provocará un fallo en el programa.
Los investigadores proporcionaron un código de prueba de concepto (PoC) que muestra cómo activar esta vulnerabilidad. Al establecer parámetros específicos y la cantidad de variables locales, se puede reducir la longitud del mapa de locales a 8. En la siguiente ejecución, intentar acceder al índice inexistente 57 provocará un panic.
Esta vulnerabilidad demuestra una vez más que no existe un código absolutamente seguro. A pesar de que el lenguaje Move realiza una verificación estática antes de la ejecución, aún puede ser eludido por desbordamientos de enteros. Los investigadores sugieren que los diseñadores del lenguaje Move incorporen más código de verificación en tiempo de ejecución para prevenir problemas similares.
Actualmente, el equipo de investigación ha descubierto otra vulnerabilidad en el lenguaje Move, y compartirá más detalles más adelante. Estos hallazgos son de gran importancia para la mejora de la seguridad del lenguaje Move.
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.
12 me gusta
Recompensa
12
4
Compartir
Comentar
0/400
PositionPhobia
· hace15h
¿Cuántos agujeros tiene este código? Uno que pase es uno menos.
Vulnerabilidad de desbordamiento de enteros en el lenguaje Move: el riesgo de referencia a la verificación de seguridad
Se encuentra otra vulnerabilidad crítica en el lenguaje Move: el desbordamiento de enteros puede provocar el colapso del Nodo
Recientemente, investigadores de seguridad han realizado un análisis exhaustivo del lenguaje Move y han descubierto una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad se presenta durante el proceso de verificación de seguridad de referencias del lenguaje Move, lo que podría provocar el colapso del nodo.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en cuatro pasos. La vulnerabilidad descubierta se encuentra en el paso de reference_safety. Este paso se utiliza principalmente para verificar la seguridad de las referencias, incluyendo la comprobación de si existen referencias colgantes y si el acceso a referencias mutables es seguro, entre otros.
La activación de la vulnerabilidad está relacionada con el concepto de bloques básicos en el lenguaje Move. Un bloque básico es una secuencia de código que no tiene instrucciones de bifurcación, excepto para la entrada y la salida. Move identifica bloques básicos al recorrer el bytecode y buscar instrucciones de bifurcación.
Durante el proceso de verificación de seguridad de las referencias, el sistema escaneará las instrucciones de bytecode en cada bloque básico y determinará si todas las operaciones de referencia son legales. Este proceso utiliza la estructura AbstractState, que contiene dos componentes importantes: el grafo de préstamo y los locales.
La vulnerabilidad se presenta en la función join_. Cuando la suma de la longitud de los parámetros y la longitud de las variables locales supera 256, puede ocurrir un desbordamiento de enteros debido al uso del tipo u8 para representar el índice local. Aunque Move tiene un mecanismo para verificar el número de locals, no incluye la longitud de los parámetros.
Aprovechando esta vulnerabilidad de desbordamiento, un atacante puede construir un bloque de código en bucle que cambie el estado del bloque. Cuando se ejecuta nuevamente el bloque básico, si el índice que la instrucción necesita acceder no existe en el nuevo mapa de locales, provocará un fallo en el programa.
Los investigadores proporcionaron un código de prueba de concepto (PoC) que muestra cómo activar esta vulnerabilidad. Al establecer parámetros específicos y la cantidad de variables locales, se puede reducir la longitud del mapa de locales a 8. En la siguiente ejecución, intentar acceder al índice inexistente 57 provocará un panic.
Esta vulnerabilidad demuestra una vez más que no existe un código absolutamente seguro. A pesar de que el lenguaje Move realiza una verificación estática antes de la ejecución, aún puede ser eludido por desbordamientos de enteros. Los investigadores sugieren que los diseñadores del lenguaje Move incorporen más código de verificación en tiempo de ejecución para prevenir problemas similares.
Actualmente, el equipo de investigación ha descubierto otra vulnerabilidad en el lenguaje Move, y compartirá más detalles más adelante. Estos hallazgos son de gran importancia para la mejora de la seguridad del lenguaje Move.