Пост
Поделитесь своими знаниями.
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)?;
Совет от профессионала: всегда используйте:
математика: :checked_* (добавление/под/mul/div)
баланс: :join () /split () для монет.
Условия гонки за общими объектами
Риск: одновременное внесение изменений в общие объекты (например, пулы AMM), приводящее к повреждению.
Пример:
move
// Two TXNs read pool.reserves simultaneously → bad swap rates
Исправить:
Используйте &mut исключительно там, где это возможно.
Для общих объектов создавайте импотентные операции (например, используйте дайджесты TXN в виде ночей).
Преимущества Sui: Система типов Move предотвращает повторный вход (в отличие от Solidity), но общие объекты все равно могут подвергаться гонкам.
Frontrunning и MEV
Риск: майнеры переупорядочивают TXN для извлечения прибыли (например, сэндвич-атаки).
Пример:
move
// AMM swap with no slippage check:
let dy = reserve_y * dx / reserve_x; // Miner can manipulate `reserve_x/y`
Исправить:
Требуются параметры min_received:
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. Специфические векторы атак
Подделка объектов Риск: поддельные объекты, внедряемые с помощью вредоносных вызовов 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