El módulo de seguridad de referencia de Move language ha descubierto una vulnerabilidad de desbordamiento de enteros que puede llevar a un ataque de denegación de servicio.
Se descubre una nueva vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de referencia de Move
Recientemente, los investigadores, al analizar profundamente el lenguaje Move, han descubierto una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad existe en el módulo de seguridad de referencias y podría provocar ataques de denegación de servicio graves. Este artículo presentará en detalle el proceso de descubrimiento de esta vulnerabilidad y los detalles técnicos relacionados.
Mecanismo de seguridad de referencias del lenguaje Move
El lenguaje Move se inspira en las ideas de Rust y admite dos tipos de referencias: referencia inmutable (&) y referencia mutable (&mut). El módulo de seguridad de referencias verifica la legalidad de todas las operaciones de referencia escaneando los bloques básicos y las instrucciones de bytecode en las funciones.
El proceso de verificación incluye los siguientes pasos:
Analizar cada bloque básico.
Ejecutar el código del bloque básico para generar el estado post
Combinar el estado previo y el estado posterior
Actualizar el estado del bloque y propagarlo a los bloques posteriores
Entre ellos, el estado incluye dos componentes clave: locals y borrow graph, que se utilizan para garantizar la seguridad de las referencias dentro de la función.
Detalles de la vulnerabilidad
La vulnerabilidad se presenta en la función join_ que hace referencia al módulo de seguridad. Cuando la suma de la longitud de los parámetros de la función y la longitud de las variables locales es mayor que 256, el uso del tipo u8 para iterar sobre locals puede causar un desbordamiento de enteros.
Específicamente:
iter_locals() devuelve un iterador de tipo u8
Cuando la longitud de los parámetros + la longitud de las variables locales > 256, se producirá un desbordamiento.
Los desarrolladores parecen haber reconocido la necesidad de verificar esto, pero el código real solo verifica la cantidad de variables locales.
Explotación de vulnerabilidades
Utilizando esta vulnerabilidad se puede construir un bloque de código en bucle:
Al ejecutarse por primera vez, se activa un desbordamiento, cambia el mapa de locals.
Al acceder a un índice de locals que no existe en la segunda ejecución, se produce un pánico.
Esto puede causar un colapso de nodos, formando un ataque de denegación de servicio.
Reproducción de vulnerabilidades
Los investigadores proporcionaron un PoC para reproducir esta vulnerabilidad:
Establecer parameters y locals ambos como SignatureIndex(0), hacer que num_locals sea 264
Después de la primera ejecución, la longitud del nuevo mapa de locales se convierte en 8
En la segunda ejecución, copyloc(57) accede a un offset inexistente, lo que provoca un panic.
Resumen y Sugerencias
Esta vulnerabilidad indica:
No existe un código absolutamente seguro, la verificación estática puede ser eludida.
La auditoría de código es muy importante, puede detectar descuidos de los desarrolladores.
El lenguaje Move debería aumentar las comprobaciones en tiempo de ejecución, y no solo depender de las comprobaciones de seguridad en la fase de validación.
Los investigadores instan a los diseñadores del lenguaje Move a reforzar los mecanismos de seguridad en tiempo de ejecución para evitar que vulnerabilidades similares se aprovechen y causen problemas más graves.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
15 me gusta
Recompensa
15
7
Compartir
Comentar
0/400
SmartContractWorker
· hace13h
¡Ya salió de la olla! Arreglarlo ha sido una carga.
Ver originalesResponder0
staking_gramps
· 07-06 05:24
¿No es demasiado amateur esta vulnerabilidad de Move?
Ver originalesResponder0
ChainMaskedRider
· 07-06 05:22
¿No es demasiado burdo el arte de escribir código?
Ver originalesResponder0
MissedTheBoat
· 07-06 05:20
Otra vulnerabilidad, Move no es tan bueno.
Ver originalesResponder0
GateUser-c799715c
· 07-06 05:19
¿Quién escribió el código? ¿Por qué es tan malo?
Ver originalesResponder0
YieldChaser
· 07-06 05:17
u8 vuelve a tener problemas.
Ver originalesResponder0
BridgeJumper
· 07-06 05:09
Desarrollo no estándar, dos lágrimas por arreglar bugs
El módulo de seguridad de referencia de Move language ha descubierto una vulnerabilidad de desbordamiento de enteros que puede llevar a un ataque de denegación de servicio.
Se descubre una nueva vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de referencia de Move
Recientemente, los investigadores, al analizar profundamente el lenguaje Move, han descubierto una nueva vulnerabilidad de desbordamiento de enteros. Esta vulnerabilidad existe en el módulo de seguridad de referencias y podría provocar ataques de denegación de servicio graves. Este artículo presentará en detalle el proceso de descubrimiento de esta vulnerabilidad y los detalles técnicos relacionados.
Mecanismo de seguridad de referencias del lenguaje Move
El lenguaje Move se inspira en las ideas de Rust y admite dos tipos de referencias: referencia inmutable (&) y referencia mutable (&mut). El módulo de seguridad de referencias verifica la legalidad de todas las operaciones de referencia escaneando los bloques básicos y las instrucciones de bytecode en las funciones.
El proceso de verificación incluye los siguientes pasos:
Entre ellos, el estado incluye dos componentes clave: locals y borrow graph, que se utilizan para garantizar la seguridad de las referencias dentro de la función.
Detalles de la vulnerabilidad
La vulnerabilidad se presenta en la función join_ que hace referencia al módulo de seguridad. Cuando la suma de la longitud de los parámetros de la función y la longitud de las variables locales es mayor que 256, el uso del tipo u8 para iterar sobre locals puede causar un desbordamiento de enteros.
Específicamente:
Explotación de vulnerabilidades
Utilizando esta vulnerabilidad se puede construir un bloque de código en bucle:
Esto puede causar un colapso de nodos, formando un ataque de denegación de servicio.
Reproducción de vulnerabilidades
Los investigadores proporcionaron un PoC para reproducir esta vulnerabilidad:
Resumen y Sugerencias
Esta vulnerabilidad indica:
Los investigadores instan a los diseñadores del lenguaje Move a reforzar los mecanismos de seguridad en tiempo de ejecución para evitar que vulnerabilidades similares se aprovechen y causen problemas más graves.