币众筹|细节!EOS 抵押漏洞分析
针对前段时间 EOS 漏洞问题,数字彗星科技 CTO 兼创始人张东谊的安全团队向链闻 ChainNews 透露了整体回顾细节,希望大家提起安全意识,但也不要过度恐慌,正确看待安全问题。
一、事件概述
6 月 22 日凌晨,EOS 官方社区发布消息称:发现 EOS 漏洞,用户抵押投票的代币在漏洞修复之前都无法赎回。随后我们根据相关消息对该漏洞进行验证确认该漏洞确实存在,且在漏洞修复前,通过精心构造的攻击使得特定用户资产进行无限期抵押,无法赎回。
我们知道 EOS 采用 DPoS 共识机制,该机制通过社区投票选举 21 个超级节点来维护 EOS 网络,为 EOS 网络提供算力、带宽以及存储支持。用户投票不需消耗 EOS,但 EOS 会被锁定。用户可以随时申请赎回抵押的 EOS,申请赎回后 72 小时后到账,同时,投票将被扣减。
此次漏洞事件发生在 EOS 赎回过程中,如果其他用户抵押 EOS 给赎回用户,系统首先将赎回用户赎回过程中的 EOS 进行再次抵押。我们已经知道申请赎回的 EOS 需要 72 小时才能到账,如前所诉,通过精心构造的攻击理论上使得指定用户资产进行无限期抵押,对用户造成严重危害。
二、漏洞攻击流程
- 假设被攻击用户拥有 0.0005 个正在赎回途中 EOS。
- 此时攻击者向赎回用户抵押 0.0001 个 EOS。
- 交易生效后,我们看到攻击者的余额没有发生变化,而赎回用户正在赎回途中的 0.0001 个 EOS 被迫再次进行抵押。
三、漏洞原理解析
攻击流程图中的攻击命令如下:
cleos --wallet-url http://localhost:6666 --url http://mainnet.genereos.io:80 system delegatebw (attacker) (victim) 「0.0001 EOS」 「0.0000 EOS」 --transfer
由于攻击者在调用命令时加入了--transfer 参数,在调用到抵押函数 delegatebw 时会调用 changbw 函数,此时 transfer 为 true
当 transfer 变量为 true 时,from 地址变成被攻击对象的地址
接下来被攻击对象的数据被修改,EOS 再次抵押
四、漏洞缓解方案
综合以上分析,数字彗星团队建议修改部分业务逻辑缓解和修复该抵押漏洞。
1.transfer 参数不管是否为 true,都应该直接在抵押发起方余额中扣除(赎回过程不受此限制)
- 梳理相关业务逻辑,审查是否存在类似漏洞
五、漏洞分析总结
通过以上分析,通过精心构造的攻击使得特定用户资产进行无限期抵押,无法赎回。利用缓解方案的措施修补代码能够有效缓解和修复该漏洞。
六、参考引用
https://github.com/EOSIO/eos/issues/4273
数字彗星科技专注区块链生态安全,真正解决区块链至全网安全问题。团队成员均是由全球顶级网络安全攻防实战的团队创建,核心技术成员曾为 360、阿里巴巴、SUN 中国工程学院、国家部委等贡献安全力量,对境外组织利用来窃取国家敏感信息的漏洞及时发现,提出临时解决方案。
团队个人均获各项国家专利,曾多次在国内知名漏洞平台提交可泄漏千万级公民用户数据的重大漏洞。 数字彗星科技的核心能力是区块链企业安全服务,为区块链生态企业保驾护航。
链闻 ChainNews:有谣言买入,有新闻卖出。
链闻作者:张东谊
版权声明:文章为作者独立观点,不代表 链闻 ChainNews 立场。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。