Sui.

Допис

Діліться своїми знаннями.

Benjamin XDV.
Jun 30, 2025
Питання та відповіді експертів

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
5
2
Поділитися
Коментарі
.

Відповіді

2
Evgeniy CRYPTOCOIN.
Jun 30 2025, 18:08

Відповідь

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. Захист:

Завжди перевіряйте право власності на об'єкт (має поле ключа та власника).

Використовуйте білі списки ідентифікаторів об'єкта для критичних операцій.

Динамічне викрадення поля Ризик: зловмисник додає шкідливі динамічні поля до вашого об'єкта. Захист:

Позначте об'єкти магазином тільки при необхідності.

Використовуйте приватні обгортки для конфіденційних даних.

5
Найкраща відповідь
Коментарі
.
0xduckmove.
Jun 30 2025, 18:52

Є стаття про найкращі практики безпеки для побудови на Sui. Приголомшливо перевірити це https://blog.sui.io/security-best-practices/

0
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.