Análisis de la vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de referencia de Move
Este artículo analizará en profundidad una vulnerabilidad de desbordamiento de enteros recientemente descubierta en el lenguaje Move. Esta vulnerabilidad se encuentra en el módulo de verificación de seguridad de referencias y podría provocar el colapso de los nodos. A través de la explicación de este artículo, los lectores obtendrán una comprensión más profunda del lenguaje Move.
Contexto de la vulnerabilidad
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 verificación de referencia de seguridad (reference_safety).
El proceso principal de verificación de seguridad es:
Reconocer bloques de código básicos
Analizar cada bloque básico
Estado antes y después de la fusión
Propagar el estado a los bloques siguientes
La clave es mantener la estructura AbstractState, que incluye locals y el gráfico de préstamos para garantizar la seguridad de las referencias.
Detalles de la vulnerabilidad
La vulnerabilidad existe en la función join_. Cuando la longitud de los parámetros de la función más la longitud de las variables locales supera 256, se produce un desbordamiento de enteros debido al uso de la iteración de tipo u8.
Específicamente:
iter_locals() devuelve un iterador de tipo u8
Ocurre un desbordamiento cuando la longitud del parámetro + la longitud de la variable local > 256
El desarrollador solo verificó el número de variables locales, ignorando la longitud de los parámetros.
Explotación de vulnerabilidades
Se puede construir un bloque básico cíclico que utiliza el desbordamiento para cambiar el estado:
La longitud total de los parámetros y las variables locales debe ser mayor que 256
Después de la primera ejecución, la longitud de los nuevos locals se desborda y se vuelve más pequeña.
Al ejecutar nuevamente, el acceso a un índice de locals que no existe provoca un pánico.
Demostración de PoC
Se proporciona un código PoC reproducible, que incluye un bloque básico en un bucle infinito. Al establecer parámetros adecuados y la longitud de las variables locales, se puede desencadenar un DoS.
Conclusión
Esta vulnerabilidad demuestra una vez más que:
No hay código absolutamente seguro
La importancia de la auditoría de código
El tiempo de ejecución de Move requiere más verificaciones de seguridad
La validación estática puede ser eludida, la seguridad en tiempo de ejecución también es importante.
Como líder en la investigación de seguridad del lenguaje Move, continuaremos profundizando en los problemas de seguridad relevantes y compartiremos los resultados de nuestra investigación con la comunidad.
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
6
Compartir
Comentar
0/400
GasFeeCryer
· hace4h
Las vulnerabilidades se pueden jugar, además hay DoS, ¡qué rico!
Ver originalesResponder0
TopEscapeArtist
· hace12h
Cometer errores es lo cotidiano en un Mercado bajista, hay que ser más cauteloso al mover ladrillos.
Ver originalesResponder0
TokenomicsTherapist
· hace12h
Este bug es realmente aterrador.
Ver originalesResponder0
TxFailed
· hace12h
jajaja clásico desbordamiento de enteros... aprendí sobre esto de la manera cara, para ser honesto
Ver originalesResponder0
SchrödingersNode
· hace12h
Me tiene nervioso, ¿por qué hay tantos problemas?
Ver originalesResponder0
AltcoinMarathoner
· hace12h
hodling a través de la tormenta de desbordamiento de enteros... solo un hito más en el ultra de web3
Análisis profundo de la vulnerabilidad de desbordamiento de enteros del módulo de seguridad de Move
Análisis de la vulnerabilidad de desbordamiento de enteros en el módulo de seguridad de referencia de Move
Este artículo analizará en profundidad una vulnerabilidad de desbordamiento de enteros recientemente descubierta en el lenguaje Move. Esta vulnerabilidad se encuentra en el módulo de verificación de seguridad de referencias y podría provocar el colapso de los nodos. A través de la explicación de este artículo, los lectores obtendrán una comprensión más profunda del lenguaje Move.
Contexto de la vulnerabilidad
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 verificación de referencia de seguridad (reference_safety).
El proceso principal de verificación de seguridad es:
La clave es mantener la estructura AbstractState, que incluye locals y el gráfico de préstamos para garantizar la seguridad de las referencias.
Detalles de la vulnerabilidad
La vulnerabilidad existe en la función join_. Cuando la longitud de los parámetros de la función más la longitud de las variables locales supera 256, se produce un desbordamiento de enteros debido al uso de la iteración de tipo u8.
Específicamente:
Explotación de vulnerabilidades
Se puede construir un bloque básico cíclico que utiliza el desbordamiento para cambiar el estado:
Demostración de PoC
Se proporciona un código PoC reproducible, que incluye un bloque básico en un bucle infinito. Al establecer parámetros adecuados y la longitud de las variables locales, se puede desencadenar un DoS.
Conclusión
Esta vulnerabilidad demuestra una vez más que:
Como líder en la investigación de seguridad del lenguaje Move, continuaremos profundizando en los problemas de seguridad relevantes y compartiremos los resultados de nuestra investigación con la comunidad.