逻辑漏洞:DEUS被攻击事件分析
2023-5-6 10:55:4 Author: www.freebuf.com(查看原文) 阅读量:12 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

北京时间2023年5月6日,DEUS的 稳定币DEI合约存在burn逻辑漏洞,攻击者已获利约630万美元。

1683340993_6455bec1e1bc3188f5054.png!small

SharkTeam对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

攻击者地址:

0x08e80ecb146dc0b835cf3d6c48da97556998f599

攻击合约:0x2b1a7a457a2c55ba1e03c087cc3e4e5b05b6360f

漏洞合约:

0xDE1E704dae0B4051e80DAbB26ab6ad6c12262DA0

攻击交易:

0xde2c8718a9efd8db0eaf9d8141089a22a89bca7d1415d04c05ba107dc1a190c3

该攻击交易的执行流程:

1、首先,攻击者(0x08e80ecb)先调用了攻击合约(0x2b1a7a45)的攻击函数。

1683341001_6455bec922961d622e0b1.png!small

2、在攻击函数中,调用漏洞合约(0xDE1E704d)的approve->burnFrom->transferFrom函数

1683341005_6455becdef08fd3a7a71d.png!small

3、在transferFrom函数中将110万个DEI转移到自己的账户,最后调用交易对的swap将DEI换成USD转移到攻击者(0x08e80ecb)。

1683341011_6455bed3276dbaf17a46d.png!small

漏洞分析:

在burnFrom函数中,直接将sender对account的allowance与account对sender的allowance进行了复制。

1683341016_6455bed870fdaff87edfc.png!small

攻击者首先对漏洞合约(0xDE1E704d)进行最大值的approve,然后调用burnFrom函数输入amount=0,即直接让漏洞合约(0xDE1E704d)对攻击合约进行了approve的最大值。

随后直接调用tranferFrom函数将110万的DEI转移到自己的地址,最后通过pair交易对换成USD完成攻击

漏洞总结:

本次事件根本原因是漏洞合约(RouteProcessor2)burnFrom的调用权限问题或者是_allowance传参错误问题,具体需要结合项目方实际业务需求进行修改,可以通过对burnFrom设置合适的管理员权限或者将_allowance[_msgSender()][account] 改成 _allowance[account][_msgSender()]等方法进行修复。

针对本次攻击事件,我们在开发过程中应遵循以下注意事项:

1、在开发资产相关的逻辑函数时,应慎重考虑业务逻辑的严谨性。

2、本次产生漏洞的burnFrom函数是项目方在4月16日进行合约升级时引入的,所以项目在上线或升级合约前,需要通过第三方专业审计团队的合约审计。

SharkTeam的愿景是全面保护Web3世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE等建立长期合作关系。

官网:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg


文章来源: https://www.freebuf.com/articles/blockchain-articles/365672.html
如有侵权请联系:admin#unsafe.sh