La vulnerabilidad de desbordamiento de enteros en la verificación de seguridad de referencia del lenguaje Move puede provocar una denegación de servicio.
Análisis de vulnerabilidad de desbordamiento de enteros en la verificación de seguridad de citas del lenguaje Move
Recientemente, se ha descubierto una nueva vulnerabilidad de desbordamiento de enteros en el proceso de verificación de seguridad que utiliza el lenguaje Move. Esta vulnerabilidad se presenta en el paso de referencia_safety de la unidad de código de verificación, involucrando bloques básicos y el mecanismo de seguridad de referencias en el lenguaje Move.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en cuatro pasos. La verificación de seguridad de referencias es uno de los aspectos importantes, utilizado para comprobar si existen referencias colgantes y si el acceso a referencias mutables es seguro, entre otros. El proceso de verificación recorre las instrucciones de bytecode de cada bloque básico.
Un bloque básico se refiere a una secuencia de código que no tiene instrucciones de bifurcación, excepto la entrada y la salida. El lenguaje Move identifica los bloques básicos al verificar las instrucciones de bifurcación y bucle. La verificación de referencia escaneará las instrucciones en cada bloque básico para determinar la legalidad de las operaciones de referencia.
El proceso de verificación utiliza la estructura AbstractState para representar el estado, que incluye dos componentes clave: locals y el gráfico de préstamos. La verificación comparará el estado antes y después de la ejecución, combinará los resultados y los propagará a los bloques posteriores.
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, se produce un desbordamiento de entero debido a la iteración de locals con el tipo u8. Esto puede llevar a que el nuevo mapa de locals sea diferente al anterior, lo que, al ejecutarse de nuevo, provoca el acceso a un índice que no existe, causando una denegación de servicio.
El código PoC provoca un desbordamiento de enteros al establecer parámetros específicos y una cantidad de variables locales, lo que resulta en un acortamiento de la longitud del mapa de locales. Al ejecutarlo nuevamente, se accede a un offset que no existe, lo que finalmente provoca un panic.
Esta vulnerabilidad indica que incluso los lenguajes de tipo estático pueden tener problemas de seguridad. Se recomienda a los diseñadores del lenguaje Move que agreguen más verificaciones de seguridad en tiempo de ejecución, en lugar de depender únicamente de las verificaciones en la fase de validación. También refleja 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.
13 me gusta
Recompensa
13
5
Compartir
Comentar
0/400
Web3ExplorerLin
· 08-01 00:31
El problema de desbordamiento necesita auditoría ahora
Ver originalesResponder0
SignatureDenied
· 07-30 09:30
La calidad del código necesita mejorar continuamente.
La vulnerabilidad de desbordamiento de enteros en la verificación de seguridad de referencia del lenguaje Move puede provocar una denegación de servicio.
Análisis de vulnerabilidad de desbordamiento de enteros en la verificación de seguridad de citas del lenguaje Move
Recientemente, se ha descubierto una nueva vulnerabilidad de desbordamiento de enteros en el proceso de verificación de seguridad que utiliza el lenguaje Move. Esta vulnerabilidad se presenta en el paso de referencia_safety de la unidad de código de verificación, involucrando bloques básicos y el mecanismo de seguridad de referencias en el lenguaje Move.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en cuatro pasos. La verificación de seguridad de referencias es uno de los aspectos importantes, utilizado para comprobar si existen referencias colgantes y si el acceso a referencias mutables es seguro, entre otros. El proceso de verificación recorre las instrucciones de bytecode de cada bloque básico.
Un bloque básico se refiere a una secuencia de código que no tiene instrucciones de bifurcación, excepto la entrada y la salida. El lenguaje Move identifica los bloques básicos al verificar las instrucciones de bifurcación y bucle. La verificación de referencia escaneará las instrucciones en cada bloque básico para determinar la legalidad de las operaciones de referencia.
El proceso de verificación utiliza la estructura AbstractState para representar el estado, que incluye dos componentes clave: locals y el gráfico de préstamos. La verificación comparará el estado antes y después de la ejecución, combinará los resultados y los propagará a los bloques posteriores.
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, se produce un desbordamiento de entero debido a la iteración de locals con el tipo u8. Esto puede llevar a que el nuevo mapa de locals sea diferente al anterior, lo que, al ejecutarse de nuevo, provoca el acceso a un índice que no existe, causando una denegación de servicio.
El código PoC provoca un desbordamiento de enteros al establecer parámetros específicos y una cantidad de variables locales, lo que resulta en un acortamiento de la longitud del mapa de locales. Al ejecutarlo nuevamente, se accede a un offset que no existe, lo que finalmente provoca un panic.
Esta vulnerabilidad indica que incluso los lenguajes de tipo estático pueden tener problemas de seguridad. Se recomienda a los diseñadores del lenguaje Move que agreguen más verificaciones de seguridad en tiempo de ejecución, en lugar de depender únicamente de las verificaciones en la fase de validación. También refleja la importancia de la auditoría de código.