名称: mvx_entry_points 描述: 识别和分析MultiversX智能合约的入口点(#[endpoint]、#[view]、#[payable])。
MultiversX入口点分析器
该技能通过枚举所有公共交互点来帮助您识别智能合约的攻击表面。
1. 识别
扫描暴露函数的 multiversx_sc 宏:
#[endpoint]:公共写入函数。高风险。#[view]:公共读取函数。低风险(除非在链上使用)。#[payable]:接受EGLD/ESDT。关键风险(值处理)。#[init]:构造函数。#[upgrade]:升级处理程序。关键风险(迁移逻辑)。
2. 风险分类
A. 非支付端点
改变状态但不接受值的函数。
- 检查:是否有
require!?谁可以调用此函数(仅所有者?)? - 风险:未经授权的状态更改。
B. 支付端点(#[payable])
接收资金的函数。
- 检查:
- 它使用
self.call_value().all()或self.call_value().single()吗? - 是否检查了
amount > 0? - 是否验证了代币ID?
- 它使用
- 风险:窃取资金,接受假代币。
C. 视图
- 检查:它是否修改状态?(它不应该,但Rust允许内部可变性或滥用)。
3. 分析工作流程
- 列出所有入口点。
- 标签访问控制:
OnlyOwner、Whitelisted、Public。 - 标签值处理:
Refusable、Payable。 - 图表数据流:它们接触哪些存储映射器?
4. 具体攻击
- 权限提升:敏感端点是否意外公开?
- DoS:公共端点插入到UnorderedSetMapper中(无限制增长)。
输出格式
入口点清单
| # | 端点 | 类型 | 支付 | 访问控制 | 风险级别 | 存储接触 | 位置 |
|---|----------|------|---------|----------------|------------|-----------------|----------|
| 1 | stake | endpoint | EGLD | Public | Critical | user_stake, total_staked | src/lib.rs:42 |
| 2 | claim | endpoint | No | Public | High | user_rewards | src/lib.rs:87 |
| 3 | set_fee | endpoint | No | #[only_owner] | Medium | fee_percent | src/admin.rs:12 |
| 4 | get_balance | view | No | Public | Low | - | src/views.rs:5 |
| 5 | init | init | No | Deploy only | Critical | all mappers | src/lib.rs:1 |
攻击表面总结
总端点:[N]
关键(支付/初始化/升级):[N]
高(改变状态,公共):[N]
中(改变状态,受限):[N]
低(视图):[N]
未检查的支付端点:[列表或“无”]
公共改变状态无访问控制:[列表或“无”]
Mandos场景中缺少的端点:[列表或“无”]
完成标准
入口点分析完成时:
- 每个
#[endpoint]、#[view]、#[payable]、#[init]、#[upgrade]和#[callback]都在清单表中。 - 每个条目都有风险分类。
- 攻击表面总结已填充。
- 任何没有代币验证的支付端点都被标记。