Beitrag
Teile dein Wissen.
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
Antworten
2Antwort
1. Die 5 wichtigsten Sicherheitslücken bei Sui Move
Unsachgemäße Zugangskontrolle
Risiko: Funktionen, die eingeschränkt werden sollten, können von jedem aufgerufen werden.
Beispiel:
move
public fun admin_withdraw(signer: &signer) { // No check!
withdraw_coins(signer, ...);
}
Korrigieren:
move
public fun admin_withdraw(signer: &signer, admin_cap: &AdminCap) {
assert!(address_of(signer) == admin_cap.admin, EUnauthorized);
}
Wichtiger Einblick: Verwenden Sie Capability Patterns (AdminCap, OwnerCap), um sensible Operationen einzudämmen.
Arithmetische Überläufe/Unterläufe
Risiko: Die u64-Mathematik läuft im Hintergrund ab (z. B. bei Salden, die auf 0 → 2^64-1 gehen).
Beispiel:
move
let total = user_balance + deposit_amount; // Overflow possible
Korrigieren:
move
use sui::math;
let total = math::checked_add(user_balance, deposit_amount)?;
Profi-Tipp: Verwenden Sie immer:
math: :checked_* (add/sub/mul/div)
balance: :join () /split () für Münzen.
Rennbedingungen für gemeinsam genutzte Objekte
Risiko: Gleichzeitige Änderungen an gemeinsam genutzten Objekten (z. B. AMM-Pools) führen zu einem beschädigten Zustand.
Beispiel:
move
// Two TXNs read pool.reserves simultaneously → bad swap rates
Korrigieren:
Verwenden Sie nach Möglichkeit ausschließlich &mut.
Entwerfen Sie für gemeinsam genutzte Objekte idempotente Operationen (z. B. erfordern Sie TXN-Digests als Nonces).
Vorteile von Sui: Das Typsystem von Move verhindert Wiedereintritte (im Gegensatz zu Solidity), aber gemeinsam genutzte Objekte können trotzdem gegeneinander antreten.
Frontrunning und MEV
Risiko: Miner ordnen TXNs neu an, um Werte zu extrahieren (z. B. Sandwich-Angriffe).
Beispiel:
move
// AMM swap with no slippage check:
let dy = reserve_y * dx / reserve_x; // Miner can manipulate `reserve_x/y`
Korrigieren:
Erforderliche Parameter min_received:
move
assert!(dy >= min_dy, EInsufficientOutput);
Verwenden Sie Fristenschecks:
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>).
Beispiel:
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!
Korrigieren:
move
constraint C: store + drop; // Restrict valid types
2. Sui-spezifische Angriffsvektoren
Objekt-Spoofing Risiko: Gefälschte Objekte, die über böswillige RPC-Aufrufe injiziert werden. Verteidigung:
Überprüfen Sie immer, ob Sie das Objekt besitzen (hat einen Schlüssel und ein Eigentümerfeld).
Verwenden Sie Positivlisten für Objekt-IDs für kritische Operationen.
Dynamisches Feld-Hijacking Risiko: Der Angreifer fügt Ihrem Objekt schädliche dynamische Felder hinzu. Verteidigung:
Objekte nur bei Bedarf mit Speicher markieren.
Verwenden Sie private Wrapper für sensible Daten.
Es gibt Artikel über bewährte Sicherheitsmethoden für Building on Sui. Es ist großartig, das zu überprüfen https://blog.sui.io/security-best-practices/
Weißt du die Antwort?
Bitte melde dich an und teile sie.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Verdiene deinen Anteil an 1000 Sui
Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.
- Warum benötigt BCS eine genaue Feldreihenfolge für die Deserialisierung, wenn Move-Strukturen benannte Felder haben?53
- Fehler bei der Überprüfung mehrerer Quellen“ in den Veröffentlichungen des Sui Move-Moduls — Automatisierte Fehlerbehebung42
- Sui-Transaktion schlägt fehl: Objekte sind für eine andere Transaktion reserviert24
- Wie interagieren Fähigkeitsbeschränkungen mit dynamischen Feldern in heterogenen Sammlungen?04