Se ha descubierto una vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencia del lenguaje Move que afecta a AptosMoveEVM.
Se ha descubierto una nueva vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencias del lenguaje Move.
Recientemente, los investigadores de seguridad descubrieron 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, específicamente en el paso de reference_safety.
El lenguaje Move realiza una verificación de unidades de código antes de ejecutar el bytecode, que se divide en 4 pasos. La verificación de seguridad de referencias es uno de los aspectos importantes, y se utiliza principalmente para asegurar que no haya referencias nulas, que el acceso a referencias mutables sea seguro y que el acceso a referencias de almacenamiento global sea seguro, entre otros.
El núcleo de la verificación de seguridad de las referencias es el análisis de los bloques básicos dentro de cada función. Un bloque básico se refiere a una secuencia de código que no tiene instrucciones de bifurcación, excepto en la entrada y salida. Move determina los bloques básicos al recorrer el bytecode y buscar todas las instrucciones de bifurcación y las instrucciones de bucle.
El proceso de verificación utiliza la estructura AbstractState para representar el estado, que incluye dos partes: el grafo de préstamos y los locales. Durante la verificación, se generará el código del bloque básico para el estado posterior, que luego se fusionará con el estado anterior para actualizar el estado del bloque y se propagará a los bloques posteriores. Este proceso es similar a la idea de Sea of Nodes en V8 turbofan.
Se encontró un fallo en la función join_. Cuando la suma de la longitud de los parámetros de la función y la longitud de las variables locales es mayor a 256, el uso del tipo u8 para iterar sobre locals puede causar un desbordamiento de enteros. Aunque Move tiene un proceso para verificar el número de locals, solo verifica los locals y no incluye la longitud de los parámetros.
Aprovechando esta vulnerabilidad, un atacante puede construir un bloque de código en bucle que utiliza el desbordamiento para cambiar el estado del bloque. Al ejecutarlo nuevamente, si el índice que necesita acceder a la instrucción no existe en el nuevo mapa de locales, se producirá un DoS.
Esta vulnerabilidad vuelve a demostrar que incluso lenguajes que valoran la seguridad como Move pueden tener problemas. Se recomienda a los diseñadores del lenguaje Move que incluyan más comprobaciones en tiempo de ejecución, en lugar de depender únicamente de las verificaciones de seguridad en la fase de validación. También se recuerda a los desarrolladores la importancia de la auditoría del 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.
12 me gusta
Recompensa
12
5
Compartir
Comentar
0/400
BoredWatcher
· hace16h
Este bug es increíblemente absurdo, ¿cómo puede ser tan primitivo?
Ver originalesResponder0
WalletInspector
· hace16h
Eh, usar Rust es mejor que usar Move.
Ver originalesResponder0
MemecoinTrader
· hace16h
lmao otro l1 se arruina... clásico desbordamiento de entero fuga alfa
Ver originalesResponder0
LidoStakeAddict
· hace16h
Move ha tenido problemas de nuevo, tsk tsk.
Ver originalesResponder0
BuyHighSellLow
· hace16h
Otra vez se ha echado a perder. ¡Destruye todo, que todo empiece de nuevo!
Se ha descubierto una vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencia del lenguaje Move que afecta a AptosMoveEVM.
Se ha descubierto una nueva vulnerabilidad de desbordamiento de enteros en el mecanismo de seguridad de referencias del lenguaje Move.
Recientemente, los investigadores de seguridad descubrieron 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, específicamente en el paso de reference_safety.
El lenguaje Move realiza una verificación de unidades de código antes de ejecutar el bytecode, que se divide en 4 pasos. La verificación de seguridad de referencias es uno de los aspectos importantes, y se utiliza principalmente para asegurar que no haya referencias nulas, que el acceso a referencias mutables sea seguro y que el acceso a referencias de almacenamiento global sea seguro, entre otros.
El núcleo de la verificación de seguridad de las referencias es el análisis de los bloques básicos dentro de cada función. Un bloque básico se refiere a una secuencia de código que no tiene instrucciones de bifurcación, excepto en la entrada y salida. Move determina los bloques básicos al recorrer el bytecode y buscar todas las instrucciones de bifurcación y las instrucciones de bucle.
El proceso de verificación utiliza la estructura AbstractState para representar el estado, que incluye dos partes: el grafo de préstamos y los locales. Durante la verificación, se generará el código del bloque básico para el estado posterior, que luego se fusionará con el estado anterior para actualizar el estado del bloque y se propagará a los bloques posteriores. Este proceso es similar a la idea de Sea of Nodes en V8 turbofan.
Se encontró un fallo en la función join_. Cuando la suma de la longitud de los parámetros de la función y la longitud de las variables locales es mayor a 256, el uso del tipo u8 para iterar sobre locals puede causar un desbordamiento de enteros. Aunque Move tiene un proceso para verificar el número de locals, solo verifica los locals y no incluye la longitud de los parámetros.
Aprovechando esta vulnerabilidad, un atacante puede construir un bloque de código en bucle que utiliza el desbordamiento para cambiar el estado del bloque. Al ejecutarlo nuevamente, si el índice que necesita acceder a la instrucción no existe en el nuevo mapa de locales, se producirá un DoS.
Esta vulnerabilidad vuelve a demostrar que incluso lenguajes que valoran la seguridad como Move pueden tener problemas. Se recomienda a los diseñadores del lenguaje Move que incluyan más comprobaciones en tiempo de ejecución, en lugar de depender únicamente de las verificaciones de seguridad en la fase de validación. También se recuerda a los desarrolladores la importancia de la auditoría del código.