Se descubre otra vulnerabilidad crítica en el lenguaje Move: el desbordamiento de enteros puede causar el colapso del Nodo
Recientemente, investigadores de seguridad han descubierto una nueva vulnerabilidad de desbordamiento de enteros al analizar a fondo Aptos Moveevm. Esta vulnerabilidad se encuentra en el proceso de verificación de seguridad de referencias del lenguaje Move, lo que podría llevar a la caída del Nodo.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en 4 pasos. Esta vulnerabilidad aparece en el paso de referencia_safety. Este paso se utiliza principalmente para verificar la seguridad de las referencias, incluyendo la comprobación de si existen referencias flotantes, si el acceso a referencias mutables es seguro, etc.
El proceso de verificación recorrerá cada bloque básico y realizará un análisis. Un bloque básico se refiere a una secuencia de código sin instrucciones de bifurcación, excepto las de entrada y salida. El lenguaje Move identifica bloques básicos al buscar instrucciones de bifurcación y de bucle.
Al verificar la seguridad de las referencias, se mantiene una estructura AbstractState que contiene información sobre el grafo de préstamos y locales. El proceso de verificación ejecutará el código del bloque básico, generando el estado posterior a la ejecución, y luego se fusionará con el estado anterior a la ejecución, actualizando el estado del bloque y propagándolo a los bloques posteriores.
La vulnerabilidad se encuentra en la función join_. Esta función se utiliza para combinar el estado antes y después de la ejecución, actualizando los locales y el gráfico de préstamos. Cuando la suma de la longitud de los parámetros y la longitud de las variables locales es mayor a 256, el uso del tipo u8 para iterar sobre los locales puede provocar un desbordamiento de enteros.
Utilizar este desbordamiento puede cambiar el estado del bloque básico. En el código con bucles, al ejecutar varias veces el mismo bloque básico, es posible acceder a un índice de locals que no existe, lo que puede provocar un pánico y hacer que el nodo se caiga.
Los investigadores proporcionaron un código PoC que, al establecer parámetros específicos y la cantidad de variables locales, provoca un desbordamiento de enteros, lo que finalmente lleva a un panic.
Esta vulnerabilidad expone que incluso un lenguaje que valora la seguridad como Move puede tener fallos. Se sugiere que los diseñadores del lenguaje Move implementen más verificaciones de seguridad en tiempo de ejecución, en lugar de depender únicamente de las verificaciones en la etapa de validación. También subraya la importancia de la auditoría de código.
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.
16 me gusta
Recompensa
16
2
Republicar
Compartir
Comentar
0/400
BlockchainDecoder
· 08-08 08:49
La verificación de citas es demasiado débil
Ver originalesResponder0
Hash_Bandit
· 08-06 01:22
Los problemas de seguridad deben ser tomados en serio.
Vulnerabilidad de desbordamiento de enteros en el lenguaje Move: existe un riesgo de verificación de seguridad de referencia.
Se descubre otra vulnerabilidad crítica en el lenguaje Move: el desbordamiento de enteros puede causar el colapso del Nodo
Recientemente, investigadores de seguridad han descubierto una nueva vulnerabilidad de desbordamiento de enteros al analizar a fondo Aptos Moveevm. Esta vulnerabilidad se encuentra en el proceso de verificación de seguridad de referencias del lenguaje Move, lo que podría llevar a la caída del Nodo.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en 4 pasos. Esta vulnerabilidad aparece en el paso de referencia_safety. Este paso se utiliza principalmente para verificar la seguridad de las referencias, incluyendo la comprobación de si existen referencias flotantes, si el acceso a referencias mutables es seguro, etc.
El proceso de verificación recorrerá cada bloque básico y realizará un análisis. Un bloque básico se refiere a una secuencia de código sin instrucciones de bifurcación, excepto las de entrada y salida. El lenguaje Move identifica bloques básicos al buscar instrucciones de bifurcación y de bucle.
Al verificar la seguridad de las referencias, se mantiene una estructura AbstractState que contiene información sobre el grafo de préstamos y locales. El proceso de verificación ejecutará el código del bloque básico, generando el estado posterior a la ejecución, y luego se fusionará con el estado anterior a la ejecución, actualizando el estado del bloque y propagándolo a los bloques posteriores.
La vulnerabilidad se encuentra en la función join_. Esta función se utiliza para combinar el estado antes y después de la ejecución, actualizando los locales y el gráfico de préstamos. Cuando la suma de la longitud de los parámetros y la longitud de las variables locales es mayor a 256, el uso del tipo u8 para iterar sobre los locales puede provocar un desbordamiento de enteros.
Utilizar este desbordamiento puede cambiar el estado del bloque básico. En el código con bucles, al ejecutar varias veces el mismo bloque básico, es posible acceder a un índice de locals que no existe, lo que puede provocar un pánico y hacer que el nodo se caiga.
Los investigadores proporcionaron un código PoC que, al establecer parámetros específicos y la cantidad de variables locales, provoca un desbordamiento de enteros, lo que finalmente lleva a un panic.
Esta vulnerabilidad expone que incluso un lenguaje que valora la seguridad como Move puede tener fallos. Se sugiere que los diseñadores del lenguaje Move implementen más verificaciones de seguridad en tiempo de ejecución, en lugar de depender únicamente de las verificaciones en la etapa de validación. También subraya la importancia de la auditoría de código.