Publicación
Comparte tu conocimiento.
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
Respuestas
2Respuesta
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.
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/
Sabes la respuesta?
Inicie sesión y compártalo.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gana tu parte de 1000 Sui
Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.
- ¿Por qué BCS requiere un orden de campo exacto para la deserialización cuando las estructuras Move tienen campos con nombre?53
- «Errores de verificación de múltiples fuentes» en las publicaciones del módulo Sui Move: resolución automática de errores42
- Fallo en la transacción Sui: objetos reservados para otra transacción24
- ¿Cómo interactúan las restricciones de capacidad con los campos dinámicos en colecciones heterogéneas?04