GDS事件 漏洞分析

1. GDS漏洞简介

https://twitter.com/BlockSecTeam/status/1610167174978760704

2. 相关地址或交易

攻击交易: https://bscscan.com/tx/0x2bb704e0d158594f7373ec6e53dc9da6c6639f269207da8dab883fc3b5bf6694 攻击合约:0x0b995c08abddc0442bee87d3a7c96b227f8e7268 攻击账号:0xcf2362b46669e04b16d0780cf9b6e61c82de36a7 被攻击合约:GDS 0xC1Bb12560468fb255A8e8431BDF883CC4cB3d278

3. 获利分析

4. 攻击过程&漏洞原因

查看攻击交易过程,发现地址0x0f8d735c0b67f845068bb31684707851f9d2767d 将代币转移至dead地址10000单位代币后,地址0xdd3e3384ae10b295fb353b1bda4fd3776bc4b650 转移196173230396551047379035单位代币至0x0f8地址。

查看GDS代币代码,发现在代币转移的_transfer函数中,将会依次调用_afterTokenTransfer -> _refreshDestroyMiningAccount -> _settlementLpMining 函数。在_settlementLpMining 函数中,GDS代币将会根据池子gdsUsdtPair (0x4526) 的流动性代币按比例分发奖励: uint256 _lpRewardAmount = _totalRewardAmount*_lpTokenBalance/_lpTokenTotalSupply

再查看交易过程,可发现地址0x0b995c08abddc0442bee87d3a7c96b227f8e7268 添加流动性后将lptoken 转移给0x0f8d735c0b67f845068bb31684707851f9d2767d,之后又转移给其它地址,循环使用同一份代币,获得多份奖励。

评论