DFS事件 漏洞分析
https://twitter.com/CertiKAlert/status/1608788290785665024
查看dex交易信息:
攻击交易: https://bscscan.com/tx/0xcddcb447d64c2ce4b3ac5ebaa6d42e26d3ed0ff3831c08923c53ea998f598a7c 攻击合约:0x87bfd80c2a05ee98cfe188fd2a0e4d70187db137 攻击账号:0xb358bfd28b02c5e925b89ad8b0eb35913d2d0805 被攻击合约:DFS 0x88eBFd7841D131BCeab3e7149217aa8e36985a40
查看攻击交易过程,发现池子中的DFS代币数量在调用skim后变多,注意skim的接收地址为DFS-LP自身:
查看DFS代币的合约代码,分析转账过程:
1) 转账时先通过if (to == address(pair) || from == address(pair) ) 判断是否满足条件,from、to的地址都是pair,因而满足条件: 2) 判断 if (takeFee && !exclusiveFromFee[from]) 是否满足,查看合约值为true,不满足,跳过发送方代币扣款步骤,直接执行 _balance[to] = _balance[to].add(amount); 增加接收方的代币余额:
3) 重复此步骤,可一直增加DFS-LP池子中的DFS代币。 4) 攻击者最后其实可直接执行swap()函数获取BSC-USD代币,无需再通过transfer()转移给DFS-LP池子。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!