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.

robot
Generación de resúmenes en curso

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.

Numen Cyber descubre de forma exclusiva otra vulnerabilidad crítica en el lenguaje move

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:

  1. Analizar cada bloque básico.
  2. Ejecutar el código del bloque básico para generar el estado post
  3. Combinar el estado previo y el estado posterior
  4. 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.

Numen Cyber descubre otra vulnerabilidad crítica en el lenguaje move

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.

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Explotación de vulnerabilidades

Utilizando esta vulnerabilidad se puede construir un bloque de código en bucle:

  1. Al ejecutarse por primera vez, se activa un desbordamiento, cambia el mapa de locals.
  2. 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.

Numen Cyber descubre en exclusiva otra vulnerabilidad crítica en el lenguaje move

Reproducción de vulnerabilidades

Los investigadores proporcionaron un PoC para reproducir esta vulnerabilidad:

  1. Establecer parameters y locals ambos como SignatureIndex(0), hacer que num_locals sea 264
  2. Después de la primera ejecución, la longitud del nuevo mapa de locales se convierte en 8
  3. En la segunda ejecución, copyloc(57) accede a un offset inexistente, lo que provoca un panic.

Numen Cyber ha descubierto otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre una nueva vulnerabilidad crítica en el lenguaje move

Numen Cyber descubrió otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre en exclusiva otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre una nueva vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubrió una nueva vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre exclusivamente otra vulnerabilidad crítica en el lenguaje move

Numen Cyber descubre en exclusiva otra vulnerabilidad crítica en el lenguaje move

Resumen y Sugerencias

Esta vulnerabilidad indica:

  1. No existe un código absolutamente seguro, la verificación estática puede ser eludida.
  2. La auditoría de código es muy importante, puede detectar descuidos de los desarrolladores.
  3. 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.

Numen Cyber descubrió exclusivamente otra vulnerabilidad crítica en el lenguaje move

Ver originales
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.
  • Recompensa
  • 7
  • Compartir
Comentar
0/400
SmartContractWorkervip
· hace13h
¡Ya salió de la olla! Arreglarlo ha sido una carga.
Ver originalesResponder0
staking_grampsvip
· 07-06 05:24
¿No es demasiado amateur esta vulnerabilidad de Move?
Ver originalesResponder0
ChainMaskedRidervip
· 07-06 05:22
¿No es demasiado burdo el arte de escribir código?
Ver originalesResponder0
MissedTheBoatvip
· 07-06 05:20
Otra vulnerabilidad, Move no es tan bueno.
Ver originalesResponder0
GateUser-c799715cvip
· 07-06 05:19
¿Quién escribió el código? ¿Por qué es tan malo?
Ver originalesResponder0
YieldChaservip
· 07-06 05:17
u8 vuelve a tener problemas.
Ver originalesResponder0
BridgeJumpervip
· 07-06 05:09
Desarrollo no estándar, dos lágrimas por arreglar bugs
Ver originalesResponder0
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)