SharkTeam:BNO攻击事件原理分析
北京时间2023年7月18日,Ocean BNO遭受闪电贷攻击,攻击者已获利约50万美元。
SharkTeam对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。
一、 事件分析
攻击者地址:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
攻击合约:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
被攻击合约:
0xdCA503449899d5649D32175a255A8835A03E4006
攻击交易:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
攻击流程:
(1)攻击者(0xa6566574)通过pancakeSwap闪电贷借取286449 枚BNO。
(2)随后调用被攻击合约(0xdCA50344)的stakeNft函数质押两个nft。
(3)接着调用被攻击合约(0xdCA50344)的pledge函数质押277856枚BNO币。
(4)调用被攻击合约(0xdCA50344)的emergencyWithdraw函数提取回全部的BNO
(5)然后调用被攻击合约(0xdCA50344)的unstakeNft函数,取回两个质押的nft并收到额外的BNO代币。
(6)循环上述过程,持续获得额外的BNO代币
(7)最后归还闪电贷后将所有的BNO代币换成50.5W个BUSD后获利离场。
二、漏洞分析
本次攻击的根本原因是:被攻击合约(0xdCA50344)中的奖励计算机制和紧急提取函数的交互逻辑出现问题,导致用户在提取本金后可以得到一笔额外的奖励代币。
合约提供emergencyWithdraw函数用于紧急提取代币,并清除了攻击者的allstake总抵押量和rewardDebt总债务量,但并没有清除攻击者的nftAddtion变量,而nftAddition变量也是通过allstake变量计算得到。
而在unstakeNft函数中仍然会计算出用户当前奖励,而在nftAddition变量没有被归零的情况下,pendingFit函数仍然会返回一个额外的BNO奖励值,导致攻击者获得额外的BNO代币。
三、安全建议
针对本次攻击事件,我们在开发过程中应遵循以下注意事项:
(1)在进行奖励计算时,校验用户是否提取本金。
(2)项目上线前,需要向第三方专业的审计团队寻求技术帮助。
- 1Little Pepe (LILPEPE) 加密货币长期价格预测:2027年或达5美元
- 2BTCTurk交易所遭黑客攻击:损失超4800万美元,资金流向追踪曝光
- 3项目周刊丨比特币与以太坊现货ETF创单周成交纪录 王峰:本轮行情由机构主导
- 4紧急逃生指南:如何安全撤出CoinUP和水母协议中的资产
- 5比特币突破12.4万美元创新高 降息预期与机构需求成主要推动力
- 6国内各行业现状与机会分析:区块链或成新趋势
- 7Strategy与BitMine:比特币和以太坊金库巨头的对决
- 8分析师 Benjamin Cowen 警告:以太坊或将引发比特币及加密市场回调
- 9华尔街传奇Tom Lee:以太坊将成金融基础设施核心,Bitmine引领ETH国库模式新纪元
- 交易所
- 币种
排名 | 交易所 | 成交额 |
---|---|---|
1 | ![]() |
¥1.42万亿 |
2 | ![]() |
¥5,573.98亿 |
3 | ![]() |
¥903.79亿 |
4 | ![]() |
¥330.03亿 |
5 | ![]() |
¥3,294.14亿 |
6 | ![]() |
¥4,756.91亿 |
7 | ![]() |
¥4,389.76亿 |
8 | ![]() |
¥55.99亿 |
9 | ![]() |
¥295.41亿 |
10 | ![]() |
¥703.33亿 |