智能合约漏洞,价值 50 万美元 BNO 攻击事件原理分析

智能合约漏洞,价值 50 万美元 BNO 攻击事件原理分析

北京时间 2023 年 7 月 18 日,Ocean BNO 遭受闪电贷攻击,攻击者已获利约 50 万美元。

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

一、 事件分析

攻击者地址:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
攻击合约:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
被攻击合约:
0xdCA503449899d5649D32175a255A8835A03E4006
攻击交易:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
攻击流程:
(1)攻击者(0xa6566574)通过 pancakeSwap 闪电贷借取 286449 枚 BNO。
image.png
(2)随后调用被攻击合约(0xdCA50344)的 stakeNft 函数质押两个 nft。
image.png
(3)接着调用被攻击合约(0xdCA50344)的 pledge 函数质押 277856 枚 BNO 币。
image.png
(4)调用被攻击合约(0xdCA50344)的 emergencyWithdraw 函数提取回全部的 BNO
image.png
(5)然后调用被攻击合约(0xdCA50344)的 unstakeNft 函数,取回两个质押的 nft 并收到额外的 BNO 代币。
image.png
(6)循环上述过程,持续获得额外的 BNO 代币
image.png
(7)最后归还闪电贷后将所有的 BNO 代币换成 50.5W 个 BUSD 后获利离场。
image.png

二、漏洞分析

本次攻击的根本原因是:被攻击合约(0xdCA50344)中的奖励计算机制和紧急提取函数的交互逻辑出现问题,导致用户在提取本金后可以得到一笔额外的奖励代币。
image.png
image.png
合约提供 emergencyWithdraw 函数用于紧急提取代币,并清除了攻击者的 allstake 总抵押量和 rewardDebt 总债务量,但并没有清除攻击者的 nftAddtion 变量,而 nftAddition 变量也是通过 allstake 变量计算得到。
image.png
而在 unstakeNft 函数中仍然会计算出用户当前奖励,而在 nftAddition 变量没有被归零的情况下,pendingFit 函数仍然会返回一个额外的 BNO 奖励值,导致攻击者获得额外的 BNO 代币。
image.png

三、安全建议

针对本次攻击事件,我们在开发过程中应遵循以下注意事项:
(1)在进行奖励计算时,校验用户是否提取本金。
(2)项目上线前,需要向第三方专业的审计团队寻求技术帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值