Publication
Partagez vos connaissances.
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
Réponses
2Réponse
1. Les 5 principaux pièges de sécurité de Sui Move
Contrôle d'accès inapproprié
Risque : les fonctions qui devraient être restreintes peuvent être appelées par n'importe qui.
Exemple :
move
public fun admin_withdraw(signer: &signer) { // No check!
withdraw_coins(signer, ...);
}
Corriger :
move
public fun admin_withdraw(signer: &signer, admin_cap: &AdminCap) {
assert!(address_of(signer) == admin_cap.admin, EUnauthorized);
}
Point clé : utilisez des modèles de fonctionnalités (AdminCap, OwnerCap) pour gérer les opérations sensibles.
Débordements/sous-débits arithmétiques
Risque : les mathématiques u64 se déroulent silencieusement (par exemple, les soldes passent à 0 → 2^64-1).
Exemple :
move
let total = user_balance + deposit_amount; // Overflow possible
Corriger :
move
use sui::math;
let total = math::checked_add(user_balance, deposit_amount)?;
Conseil de pro : utilisez toujours :
math : :checked_* (add/sub/mul/div)
balance : :join () /split () pour les pièces.
Conditions de course aux objets partagés
Risque : modifications simultanées apportées à des objets partagés (par exemple, des pools AMM) entraînant une altération de l'état.
Exemple :
move
// Two TXNs read pool.reserves simultaneously → bad swap rates
Corriger :
Utilisez &mut exclusivement dans la mesure du possible.
Pour les objets partagés, concevez des opérations idempotentes (par exemple, exigez des résumés TXN sous forme de nonces).
Avantage de la combinaison : Le système de types de Move empêche la réentrée (contrairement à Solidity), mais les objets partagés peuvent toujours courir.
Frontrunning et MEV
Risque : les mineurs réorganisent les TXN pour en extraire la valeur (par exemple, attaques sandwich).
Exemple :
move
// AMM swap with no slippage check:
let dy = reserve_y * dx / reserve_x; // Miner can manipulate `reserve_x/y`
Corriger :
Exiger les paramètres min_received :
move
assert!(dy >= min_dy, EInsufficientOutput);
Utilisez les vérifications des délais :
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>).
Exemple :
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!
Corriger :
move
constraint C: store + drop; // Restrict valid types
###2. Vecteurs d'attaque spécifiques à Sui Usurpation d'objet Risque : faux objets injectés via des appels RPC malveillants. Défense :
Vérifiez toujours la propriété de l'objet (possède une clé et un champ propriétaire).
Utilisez des listes blanches d'identification d'objets pour les opérations critiques.
Détournement dynamique de champs Risque : l'attaquant ajoute des champs dynamiques malveillants à votre objet. Défense :
Marquez les objets avec Store uniquement si nécessaire.
Utilisez des wrappers privés pour les données sensibles.
Il existe un article sur les meilleures pratiques de sécurité pour la construction sur Sui. C'est génial de vérifier ceci https://blog.sui.io/security-best-practices/
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gagne ta part de 1000 Sui
Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.
- Pourquoi BCS exige-t-il un ordre de champs exact pour la désérialisation alors que les structures Move ont des champs nommés ?53
- « Erreurs de vérification de sources multiples » dans les publications du module Sui Move - Résolution automatique des erreurs42
- Échec de la transaction Sui : objets réservés pour une autre transaction24
- Comment les contraintes de capacité interagissent-elles avec les champs dynamiques dans des collections hétérogènes ?04