fegexPro--SmartDeFi 攻击分析

2022年5月17日 R0X被攻击损失约130万
相关信息:https://www.tuoluo.cn/article/detail-10098039.html
攻击交易:
https://bscscan.com/tx/0xe956da324e16cb84acec1a43445fc2adbcdeb0e5635af6e40234179857858f82

合约代码:(SmartDeFi 未验证–但代码与fegexPro代码相似->{类似与fegexPro与erc20代码的结合})
所以参考代码为:https://bscscan.com/address/0x818e2013dd7d9bf4547aaabf6b617c1262578bc7#code


与5月16日fegexPro池被攻击(https://www.lianantech.com/#/infomationDetail?id=640)不同,SmartDeFi 与fegexPro代码在depositInternal函数中为直接调用tranceferfrom函数传递token,并记录用户抵押数量,所以无法实现重复抵押再调用swapToSwap提取,但池中代币的计算方式与fegexPro计算方式基本相同,

 //fegexPro 合约代码
 function setTokenBalance() internal {
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;  
    }
        
    function setMainBalance() internal {
        uint256 al = (_totalSupply2 +_totalSupply7 + _totalSupply8);
        _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al;
    }

同时买卖也是通过_records[Main].balance, _records[Token].balance这两个变量来实现计算输出值的.

calcOutGivenIn( inRecord.balance, bmul(1e18, 25),outRecord.balance, bmul(1e18, 25), bmul(msg.value, bdiv(999, 1000)),0);

因此,可以通过质押后调用swapToSwap来减少_totalSupplyX数量同时IERC20(X).balanceOf(address(this))数量保持不变,增加_records[X].balance的值,导致卖出相同数量的token,可以获得更多代币.


所以SmartDeFi基本攻击流程为:

  1. 在限制内购买大量(R0X)代币.
  2. 质押超大量fBNB,并调用swapToSwap(将对应fBNB授权给自己合约),同时提高(R0X)代币的价格.
  3. 调用sync()同步更新池内代币价格
  4. 卖出步骤1内购买的大量(R0X)代币,获得超过购买时所花(BNB)金钱.
  5. 提取步骤2中授权的所有(fBNB)代币.完成攻击

漏洞影响范围:所有SmartDeFi协议.
漏洞原因:不受信任的 path 参数被传递到函数swapToSwap中,同时并未验证代币是否真正被发送.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值