了解权限与访问控制
引言
权限控制是区块链智能合约安全的核心。Sui Move 使用 TxContext
的 tx_context::sender
获取调用者地址,验证用户权限。然而,遗漏身份验证可能导致未授权访问,如篡改他人提案。本章介绍 Sui Move 的权限控制机制,以 VoteChain 投票系统为例,分析未验证调用者身份的漏洞,学习如何利用和修复此类问题。
通过本章,你将:
- 了解 Sui Move 的
TxContext
权限验证。 - 掌握未授权访问漏洞,如提案篡改。
- 学会在 CTF 中发现和修复权限控制问题。
我们将分析 chapter_5::vote
中的提案关闭漏洞,实践窃取投票权,并在任务中修复权限管理。
1. Sui Move 的权限控制
1.1 使用 TxContext 验证身份
Sui Move 通过 TxContext
管理权限:
tx_context::sender(ctx)
:返回交易调用者地址,用于验证身份。- 断言(如
assert!
)确保调用者是授权用户,如提案创建者。
1.2 未授权访问的危害
常见漏洞包括:
- 未验证调用者:允许任意用户执行敏感操作,如关闭提案。
- 错误验证:逻辑错误导致权限绕过。
- 共享对象滥用:未限制
share_object
访问。
这些漏洞可能导致资产窃取或系统篡改。
1.3 VoteChain 的提案关闭漏洞
在 chapter_5::vote
中:
close_proposal
未验证tx_context::sender
是否为proposal.owner
。- 攻击者可关闭他人提案,窃取锁定的
Coin<VOTE>
。 - 危害:投票系统公平性受损,提案创建者损失投票权。
2. 防御权限控制漏洞
2.1 实现权限检查
- 使用
assert!
检查tx_context::sender
是否为预期用户。 - 示例:assert!(proposal.owner == tx_context::sender(ctx), E_UNAUTHORIZED);
2.2 限制敏感操作
- 限制函数访问,仅授权必要用户(如提案创建者)。
- 避免公开敏感操作。
2.3 结合状态增强安全
- 结合状态验证(如提案是否关闭)增强权限控制。
3. CTF 中的权限漏洞
3.1 CTF 中的权限漏洞
权限控制漏洞在 CTF 中常见:
- 未授权访问:关闭他人提案,窃取资产。
- 权限绕过:利用逻辑错误执行敏感操作。
在 VoteChain,攻击者可窃取提案的 Coin<VOTE>
,破坏系统。
3.2 利用与修复权限漏洞
在 实践(practice.md
),你将:
- 利用
close_proposal
漏洞,关闭他人提案,窃取Coin<VOTE>
。 - 分析漏洞危害,理解权限控制的重要性。
在 任务5(task5.md
),你将:
- 修复
close_proposal
,添加调用者验证。 - 测试修复,确保未授权访问失效。