Manticore发现ENS漏洞
以太坊域名服务(ENS)合约近期出现了一个关键漏洞(CVE-2020-5232),促使官方发布安全公告并迁移至新合约。ENS允许用户将在线资源与人类可读的名称相关联,自然也包括域名转让和销售功能。
关于该漏洞的具体细节公开信息很少。当我们听说即将发布的修复时不禁思考:Manticore能否发现这个漏洞?
简而言之,如果某人以特定方式转让ENS名称,之后就能从新所有者手中重新夺回该名称。而正常转让流程则不会出现此问题。换句话说,利用此漏洞需要转让方从一开始就故意设置特定条件。
技术分析过程
我们决定深入研究,尝试用Manticore对原始合约进行分析:
- 通过etherscan.io获取合约代码
- 发现代码并非Solidity编写,而是采用LLL语言
- 利用Manticore的EVM层级分析能力,逆向找到合约创建交易
- 提取初始化字节码进行分析
根据安全公告,漏洞可通过四个交易步骤利用:
- 攻击者购买ENS节点
- 攻击者进行未知的漏洞利用准备
- 攻击者将节点出售给受害者
- 攻击者重新夺回节点所有权
通过审查合约导出的函数接口,我们确定了关键操作:
|
|
自动化漏洞挖掘
将这些信息整合到Manticore脚本后,符号执行引擎在几分钟内就自动发现了两种利用方式:
完整利用轨迹显示,攻击者需要在出售节点前发送setTTL或setResolver交易。以下是Manticore生成的两种利用路径:
|
|
安全建议
新版ENS合约API已进行重大修改,这些利用方式不再适用。我们建议:
- 合约开发者应将关键安全属性的测试纳入开发流程
- 读者可尝试编写Manticore脚本来验证新合约的安全性
Manticore能帮助开发者在无需深入理解合约内部逻辑的情况下,进行代码推理、安全测试和漏洞利用生成。这个ENS案例特别有趣,因为它展示了Manticore处理非Solidity合约和底层EVM代码的能力。
如需了解更多Manticore使用技巧,请参考我们的《构建安全合约》指南,其中包含符号执行教程和使用技巧。截至2020年3月3日,ENS已完成合约迁移并发布了事件分析报告。