Допис
Діліться своїми знаннями.
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
Відповіді
2Відповідь
1. Топ-5 підводних каменів безпеки в Sui Move
Неправильний контроль доступу
Ризик: Функції, які повинні бути обмежені, можуть викликати будь-хто.
Приклад:
move
public fun admin_withdraw(signer: &signer) { // No check!
withdraw_coins(signer, ...);
}
Виправити:
move
public fun admin_withdraw(signer: &signer, admin_cap: &AdminCap) {
assert!(address_of(signer) == admin_cap.admin, EUnauthorized);
}
Ключова інформація: Використовуйте шаблони можливостей (AdminCap, OwnerCap) для створення чутливих операцій.
Арифметичні переливи/підливи
Ризик: математика u64 обертається безшумно (наприклад, баланси, що переходять до 0 → 2 ^ 64-1).
Приклад:
move
let total = user_balance + deposit_amount; // Overflow possible
Виправити:
move
use sui::math;
let total = math::checked_add(user_balance, deposit_amount)?;
Порада професіонала: Завжди використовуйте:
математика: :перевірений_* (додати/під/множ/div)
баланс: :join () /split () для монет.
Умови гонки спільних об'єктів
Ризик: Одночасні модифікації спільних об'єктів (наприклад, пулів AMM), що призводять до пошкодженого стану.
Приклад:
move
// Two TXNs read pool.reserves simultaneously → bad swap rates
Виправити:
Використовуйте &mut виключно там, де це можливо.
Для спільних об'єктів проектуйте неефективні операції (наприклад, вимагайте дайджестів TXN як nonces).
Перевага Sui: Система типів Move запобігає повторному в'їзду (на відміну від Solidity), але спільні об'єкти все ще можуть змагатися.
Фронтруннінг і MEV
Ризик: Майнери переупорядковують TXT для вилучення значення (наприклад, сендвіч-атаки).
Приклад:
move
// AMM swap with no slippage check:
let dy = reserve_y * dx / reserve_x; // Miner can manipulate `reserve_x/y`
Виправити:
Потрібні параметри min_:
move
assert!(dy >= min_dy, EInsufficientOutput);
Використовуйте перевірки термінів:
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>).
Приклад:
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!
Виправити:
move
constraint C: store + drop; // Restrict valid types
2. Специфічні вектори атаки для SUI
Об'єктна підробка Ризик: підроблені об'єкти вводяться через шкідливі виклики RPC. Захист:
Завжди перевіряйте право власності на об'єкт (має поле ключа та власника).
Використовуйте білі списки ідентифікаторів об'єкта для критичних операцій.
Динамічне викрадення поля Ризик: зловмисник додає шкідливі динамічні поля до вашого об'єкта. Захист:
Позначте об'єкти магазином тільки при необхідності.
Використовуйте приватні обгортки для конфіденційних даних.
Є стаття про найкращі практики безпеки для побудови на Sui. Приголомшливо перевірити це https://blog.sui.io/security-best-practices/
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.
- Чому BCS вимагає точного порядку полів для десеріалізації, коли структури Move мають названі поля?53
- Помилки перевірки кількох джерел» у публікаціях модуля Sui Move - автоматичне вирішення помилок42
- Невдала операція Sui: об'єкти, зарезервовані для іншої транзакції24
- Як обмеження здібностей взаємодіють з динамічними полями в гетерогенних колекціях?04