Bài viết
Chia sẻ kiến thức của bạn.
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
Câu trả lời
2Trả lời
1. 5 cạm bẫy bảo mật hàng đầu trong Sui Move
Kiểm soát truy cập không đúng
Rủi ro: Bất kỳ ai cũng có thể gọi được các chức năng cần bị hạn chế.
Ví dụ:
move
public fun admin_withdraw(signer: &signer) { // No check!
withdraw_coins(signer, ...);
}
Khắc phục:
move
public fun admin_withdraw(signer: &signer, admin_cap: &AdminCap) {
assert!(address_of(signer) == admin_cap.admin, EUnauthorized);
}
Thông tin chi tiết chính: Sử dụng các mẫu khả năng (AdminCap, OwnerCap) để thực hiện các hoạt động nhạy cảm.
Số học tràn trộng/dòng chảy dưới
Rủi ro: toán học u64 xoay quanh một cách âm thầm (ví dụ: số dư chuyển sang 0 → 2 ^ 64-1).
Ví dụ:
move
let total = user_balance + deposit_amount; // Overflow possible
Khắc phục:
move
use sui::math;
let total = math::checked_add(user_balance, deposit_amount)?;
Mẹo chuyên nghiệp: Luôn sử dụng:
toán học: :checked_* (thêm/sub/mul/div)
balance: :join () /split () cho tiền xu.
Điều kiện cuộc đua đối tượng chia sẻ
Rủi ro: Các sửa đổi đồng thời đối với các đối tượng được chia sẻ (ví dụ: nhóm AMM) dẫn đến trạng thái bị hỏng.
Ví dụ:
move
// Two TXNs read pool.reserves simultaneously → bad swap rates
Khắc phục:
Sử dụng & mut độc quyền nếu có thể.
Đối với các đối tượng được chia sẻ, thiết kế các hoạt động idempotent (ví dụ: yêu cầu các bản phân tích TXN dưới dạng nonces).
Lợi thế của Sui: Hệ thống kiểu Move ngăn chặn sự tái nhập (không giống như Solidity), nhưng các đối tượng được chia sẻ vẫn có thể chạy đua.
Frontrunning và MEV
Rủi ro: Các thợ đào sắp xếp lại TXT để trích xuất giá trị (ví dụ: tấn công sandwich).
Ví dụ:
move
// AMM swap with no slippage check:
let dy = reserve_y * dx / reserve_x; // Miner can manipulate `reserve_x/y`
Khắc phục:
Yêu cầu tham số min_:
move
assert!(dy >= min_dy, EInsufficientOutput);
Sử dụng kiểm tra thời hạn:
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>).
Ví dụ:
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!
Khắc phục:
move
constraint C: store + drop; // Restrict valid types
2. Vectơ tấn công cụ thể của Sui
Giả mạo đối tượng Rủi ro: Các đối tượng giả được tiêm qua các cuộc gọi RPC độc hại. Phòng thủ:
Luôn xác minh quyền sở hữu đối tượng (có trường khóa và chủ sở hữu).
Sử dụng danh sách trắng ID đối tượng cho các hoạt động quan trọng.
Không cướp trường động Rủi ro: Kẻ tấn công thêm trường động độc hại vào đối tượng của bạn. Phòng thủ:
Đánh dấu các đối tượng với cửa hàng chỉ nếu cần thiết.
Sử dụng gói riêng cho dữ liệu nhạy cảm.
Có bài viết về các phương pháp an ninh tốt nhất cho việc xây dựng trên Sui. Thật tuyệt vời khi kiểm tra https://blog.sui.io/security-best-practices/
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Kiếm phần của bạn từ 1000 Sui
Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?53
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động42
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác24
- Làm thế nào để các ràng buộc về khả năng tương tác với các trường động trong các bộ sưu tập không đồng nhất?04