La vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencia del lenguaje Move podría causar un ataque de denegación de servicio.
El mecanismo de seguridad de referencia del lenguaje Move tiene una vulnerabilidad de desbordamiento de enteros
Recientemente, los investigadores de seguridad han descubierto una nueva vulnerabilidad de desbordamiento de enteros al analizar en profundidad el lenguaje Move. Esta vulnerabilidad se presenta durante el proceso de verificación de seguridad de referencias del lenguaje Move y podría llevar a un ataque de denegación de servicio.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en 4 pasos. Esta vulnerabilidad existe en la fase de verificación de referencia de seguridad (reference_safety). El principal objetivo de la verificación de referencia de seguridad es garantizar que no haya referencias colgantes, acceso seguro a referencias mutables, acceso seguro a referencias de almacenamiento global, etc.
El proceso de verificación recorrerá las instrucciones de bytes de cada bloque básico. Un bloque básico se refiere a una secuencia de código sin instrucciones de bifurcación, aparte de las de entrada y salida. El lenguaje Move identifica los bloques básicos analizando las instrucciones de bifurcación y las de bucle.
La verificación de seguridad utiliza la estructura AbstractState para rastrear variables locales y relaciones de referencia. Contiene dos partes: locals y el gráfico de préstamos. Durante la verificación, se comparan los estados antes y después de la ejecución, y se fusionan las actualizaciones.
La vulnerabilidad se encuentra en la función join_ en estado de fusión. Esta función itera sobre locals usando el tipo u8, pero si la cantidad de parámetros y variables locales supera 256, se producirá un desbordamiento de enteros. Aunque hay una lógica para verificar la cantidad de locals, no se considera la longitud de los parámetros.
Un atacante puede construir un bloque básico cíclico, aprovechando este desbordamiento para cambiar el estado. Al ejecutarse nuevamente, acceder a un índice de locales que no existe provocará un pánico, lo que resultará en una denegación de servicio.
Esta vulnerabilidad refleja que incluso los lenguajes de tipo estático seguro pueden tener riesgos de seguridad. Se recomienda que el lenguaje Move implemente más verificaciones de seguridad en tiempo de ejecución, y no solo dependa de la fase de validación. También resalta 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.
La vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencia del lenguaje Move podría causar un ataque de denegación de servicio.
El mecanismo de seguridad de referencia del lenguaje Move tiene una vulnerabilidad de desbordamiento de enteros
Recientemente, los investigadores de seguridad han descubierto una nueva vulnerabilidad de desbordamiento de enteros al analizar en profundidad el lenguaje Move. Esta vulnerabilidad se presenta durante el proceso de verificación de seguridad de referencias del lenguaje Move y podría llevar a un ataque de denegación de servicio.
El lenguaje Move realiza una verificación de código antes de ejecutar el bytecode, que se divide en 4 pasos. Esta vulnerabilidad existe en la fase de verificación de referencia de seguridad (reference_safety). El principal objetivo de la verificación de referencia de seguridad es garantizar que no haya referencias colgantes, acceso seguro a referencias mutables, acceso seguro a referencias de almacenamiento global, etc.
El proceso de verificación recorrerá las instrucciones de bytes de cada bloque básico. Un bloque básico se refiere a una secuencia de código sin instrucciones de bifurcación, aparte de las de entrada y salida. El lenguaje Move identifica los bloques básicos analizando las instrucciones de bifurcación y las de bucle.
La verificación de seguridad utiliza la estructura AbstractState para rastrear variables locales y relaciones de referencia. Contiene dos partes: locals y el gráfico de préstamos. Durante la verificación, se comparan los estados antes y después de la ejecución, y se fusionan las actualizaciones.
La vulnerabilidad se encuentra en la función join_ en estado de fusión. Esta función itera sobre locals usando el tipo u8, pero si la cantidad de parámetros y variables locales supera 256, se producirá un desbordamiento de enteros. Aunque hay una lógica para verificar la cantidad de locals, no se considera la longitud de los parámetros.
Un atacante puede construir un bloque básico cíclico, aprovechando este desbordamiento para cambiar el estado. Al ejecutarse nuevamente, acceder a un índice de locales que no existe provocará un pánico, lo que resultará en una denegación de servicio.
Esta vulnerabilidad refleja que incluso los lenguajes de tipo estático seguro pueden tener riesgos de seguridad. Se recomienda que el lenguaje Move implemente más verificaciones de seguridad en tiempo de ejecución, y no solo dependa de la fase de validación. También resalta la importancia de la auditoría de código.