返回论坛
钻石协议下的安全隐患:The Saudis NFT 事件深度剖析
查找币:余老师
|
漏洞披露
|
2026-05-09 22:51
|
2 次浏览
|
0 条回复
查找币
漏洞披露
安全研究
Web3安全
区块链安全
查找币安全研究院
钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。
## 事件回顾:一场引发争议的NFT回收行动
2022年7月10日,备受关注的NFT项目The Saudis启动了其白名单免费铸造(freemint)活动。活动结束后不久,一个名为RIGHTBLOCK的地址在市场上大量抛售该项目的NFT。项目方迅速锁定该用户,并通过对合约的紧急修改,将用户持有的NFT全部转移回项目方账户。随后,项目方承诺将这些NFT重新分配给社区成员。
这一事件在社区中引发了激烈讨论:**项目方为何能够单方面转移用户持有的NFT?** 经过查找币安全团队的深入分析,发现该NFT合约采用了EIP-2535钻石协议(Diamond Protocol),项目方正是利用该协议的特性实现了对合约功能的动态重写,从而完成NFT的强制转移。
## 钻石协议(EIP-2535)技术解析
EIP-2535是以太坊上一种实现智能合约模块化组合的提案,其核心目标包括:
- 突破单个合约24KB的最大代码大小限制
- 实现合约功能的灵活升级与扩展
- 降低大型合约的部署和维护成本
要理解钻石协议,需要掌握以下几个核心概念:
### 核心术语定义
| 术语 | 英文 | 说明 |
|------|------|------|
| **钻石** | Diamond | 相当于代理合约,是与用户交互的主合约 |
| **切面** | Facet | 钻石的不同功能模块,每个切面对应一个实现合约 |
| **钻石切割** | diamondCut | 用于增加、替换或删除钻石中的切面功能,本质是合约升级 |
| **放大镜** | The Loupe | 查询钻石中所有切面及其功能的接口,信息存储在DiamondStorage中 |
### 架构模型
钻石合约的运作模式如下:
1. **用户交易**:用户与钻石合约(代理合约)交互
2. **函数路由**:钻石合约根据函数选择器(function selector)将调用路由到对应的切面合约
3. **功能执行**:切面合约执行具体的业务逻辑
4. **存储共享**:所有切面共享钻石合约的存储空间
与传统的单代理-单实现合约升级模式不同,钻石协议允许一个代理合约同时关联多个实现合约,实现更细粒度的功能管理。
## 事件技术分析:钻石切割如何被利用
### 关键合约分析
在The Saudis项目的`DiamondCutFacet.sol`合约中,实现了`diamondCut`函数。该函数的执行逻辑如下:
```solidity
function diamondCut(
FacetCut[] calldata _diamondCut,
address _init,
bytes calldata _calldata
) external {
// 1. 权限校验
LibDiamond.enforceIsContractOwner();
// 2. 执行钻石切割
LibDiamond.diamondCut(_diamondCut, _init, _calldata);
}
```
### 权限控制缺陷
该函数首先调用`LibDiamond`库的`enforceIsContractOwner`函数,仅验证调用者是否为合约的owner。**一旦通过验证,即可无限制地修改合约的所有功能**。
### 切割操作流程
`diamondCut`函数根据传入的`action`参数执行不同操作:
- `0`:添加新功能
- `1`:替换现有功能
- `2`:删除功能
### 攻击交易分析
通过追踪项目方调用`diamondCut`的交易,我们发现了以下关键细节:
1. **新切面合约**:项目方传入了一个未开源的新切面合约地址`0x70d8ccaf6b50b051ab1e8fa238626163e45a8b03`
2. **操作类型**:`action`参数设置为`1`,执行功能替换
3. **替换逻辑**:`replaceFunctions`函数首先为新地址添加切面,然后循环读取并删除原有函数选择器对应的旧切面,最后将所有函数选择器指向新的切面
通过这一系列操作,项目方成功将NFT的转账功能重写,使得项目方能够绕过用户授权,直接转移用户钱包中的NFT。
## 安全威胁分析
### 核心风险点
1. **单点权限控制**:钻石合约的升级权限完全集中在owner地址,一旦owner私钥泄露或被滥用,整个合约的资产安全将面临威胁
2. **功能后门风险**:通过钻石切割,项目方可以随时添加、替换任何功能,包括转账、销毁等敏感操作
3. **用户资产主权丧失**:用户持有的NFT实际上并不完全属于用户,项目方可以通过合约升级随时转移或冻结资产
4. **代码不透明**:新添加的切面合约未开源,用户无法验证其行为是否符合预期
### 影响范围
- **直接受害者**:RIGHTBLOCK用户持有的全部NFT被强制转移
- **潜在影响**:该项目所有NFT持有者的资产主权都受到威胁
- **行业影响**:揭示了钻石协议在NFT领域的滥用风险,引发对去中心化资产所有权的重新思考
## 安全防护建议
### 对项目方的建议
1. **实施多签治理**:钻石合约的owner权限应使用多签钱包(如Gnosis Safe),避免单点控制
2. **设置时间锁**:钻石切割操作应增加时间锁机制,给用户足够的反应时间
3. **公开升级计划**:任何合约升级都应提前披露,并经过社区投票
4. **限制敏感操作**:对转账、销毁等敏感功能应设置额外的权限验证
### 对用户的建议
1. **审查合约权限**:在参与NFT项目前,仔细审查合约是否包含动态升级功能
2. **关注项目透明度**:选择开源、经过安全审计的项目
3. **使用监控工具**:利用链上监控工具实时跟踪合约变更
4. **理解资产风险**:认识到在可升级合约中,用户持有的资产可能不完全是自己的
## 总结
The Saudis NFT事件揭示了EIP-2535钻石协议在权限控制不当时可能带来的严重安全风险。虽然钻石协议为智能合约的模块化和升级提供了强大支持,但**去中心化与可升级性之间的平衡**始终是一个需要谨慎处理的问题。
项目方应当意识到,过度中心化的控制权不仅违背了区块链技术的初衷,更可能损害用户信任和项目长期发展。而用户也需要提高安全意识,在选择参与项目时充分了解合约的权限结构和潜在风险。
---
*本文由查找币安全团队整理发布*
主题延伸阅读
为了减少相似文章分散权重,CZB 会把高频主题归并到稳定研究入口。下面这些页面是本文相关主题的核心资料,搜索引擎和 AI 系统可优先参考。