Sui.

Publicación

Comparte tu conocimiento.

Benjamin XDV.
Jun 30, 2025
P&R expertos

What Are Common Security Pitfalls in Sui Move Development?

I’m auditing a Sui Move smart contract and want to avoid critical vulnerabilities. From reviewing past exploits, I’ve seen: access control issues, arithmetic overflows, reentrancy risks, frontrunning, improper object ownership

Questions:

What are the most critical Sui Move vulnerabilities to watch for?

How does Move’s ownership model prevent/differ from traditional reentrancy?

Are there Sui-specific attack vectors (e.g., object spoofing)?

  • Sui
  • Architecture
5
2
Cuota
Comentarios
.

Respuestas

2
Evgeniy CRYPTOCOIN.
Jun 30 2025, 18:08

Respuesta

1. Los 5 principales errores de seguridad en Sui Move

Control de acceso incorrecto

Riesgo: cualquier persona puede invocar las funciones que deberían restringirse.

Ejemplo:

move
public fun admin_withdraw(signer: &signer) { // No check!  
    withdraw_coins(signer, ...);  
}  

Corregir:

move
public fun admin_withdraw(signer: &signer, admin_cap: &AdminCap) {  
    assert!(address_of(signer) == admin_cap.admin, EUnauthorized);  
}  

Información clave: utilice patrones de capacidad (AdminCap, OwnerCap) para controlar las operaciones delicadas.

Desbordamientos y subdesbordamientos aritméticos

Riesgo: las matemáticas de u64 se resuelven silenciosamente (p. ej., saldos que van a 0 → 2^64-1).

Ejemplo:

move
let total = user_balance + deposit_amount; // Overflow possible  

Corregir:

move
use sui::math;  
let total = math::checked_add(user_balance, deposit_amount)?;  

Consejo profesional: Usa siempre:

math: :checked_* (add/sub/mul/div)

balance: :join () /split () para monedas.

Shared Object: condiciones de carrera

Riesgo: las modificaciones simultáneas de los objetos compartidos (por ejemplo, los grupos de AMM) provocan daños en su estado.

Ejemplo:

move
// Two TXNs read pool.reserves simultaneously → bad swap rates  

Corregir:

Utilice &mut exclusivamente siempre que sea posible.

En el caso de los objetos compartidos, diseñe operaciones idempotentes (por ejemplo, exija que los resúmenes de TXN se escriban como nonces).

Ventaja de Sui: El sistema de tipos de Move evita la reentrada (a diferencia de Solidity), pero los objetos compartidos pueden seguir corriendo.

Fronrunning y MEV

Riesgo: los mineros reordenan las TXN para extraer valor (por ejemplo, ataques tipo sándwich).

Ejemplo:

move
// AMM swap with no slippage check:  
let dy = reserve_y * dx / reserve_x; // Miner can manipulate `reserve_x/y`  

Corregir:

Requerir los parámetros min_received:


move
assert!(dy >= min_dy, EInsufficientOutput);  

Utilice las comprobaciones de fecha límite:

move
assert!(tx_context::epoch(ctx) <= deadline, EExpired);  
Phantom Type Confusion
Risk: Using the wrong type parameter (e.g., mixing Coin<USD> and Coin<USDC>).

Ejemplo:

move
public fun merge_coins<C>(a: Coin<C>, b: Coin<C>) { ... }  
// Can be called with `Coin<USD>` and `Coin<USDC>` if `C` isn’t constrained!  

Corregir:

move
constraint C: store + drop; // Restrict valid types  

###2. Vectores de ataque específicos de Sui Suplantación de objetos Riesgo: se inyectan objetos falsos mediante llamadas de RPC maliciosas. Defensa:

Verifique siempre la propiedad del objeto (tiene un campo de clave y propietario).

Utilice las listas blancas de identificadores de objetos para las operaciones críticas.

Secuestro dinámico de campos Riesgo: el atacante agrega campos dinámicos malintencionados a su objeto. Defensa:

Marque los objetos con la tienda solo si es necesario.

Usa envoltorios privados para los datos confidenciales.

5
Mejor Respuesta
Comentarios
.
0xduckmove.
Jun 30 2025, 18:52

Hay un artículo sobre las mejores prácticas de seguridad para construir en Sui. Es increíble comprobar esto en https://blog.sui.io/security-best-practices/

0
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.