慢雾分析 AutoShark 被黑:黑客利用 AutoShark 策略池机制分两步完成攻击

2021-05-25 14:36:45
Collection

链捕手消息,据慢雾区分析,币安智能链(BSC)DeFi 项目 AutoShark Finance 被黑,导致代币价格闪崩。慢雾团队针对攻击过程分析如下:

由于 AutoShark 策略池的机制,攻击者需要事先存入一定数量的 LP 代币到策略池中,为后续攻击做准备,所以整个攻击其实分成了 2 步,这里主要分析的是第 2 笔的攻击交易。

攻击步骤如下(交易哈希):

1. 攻击者从 Pancake 的 WBNB/BUSD 交易对中借出大量 WBNB;

2. 将第 1 步借出的全部 WBNB 中的一半通过 Panther 的 SHARK/WBNB 交易对兑换出大量的 SHARK,同时池中 WBNB 的数量增多;

3. 将第 1 步和第 2 步的 WBNB 和 SHARK 打入到 SharkMinter 中,为后续攻击做准备;

4. 调用 AutoShark 项目中的 WBNB/SHARK 策略池中的 getReward 函数,该函数会根据用户获利的资金从中抽出一部分手续费,作为贡献值给用户奖励 SHARK 代币,这部分操作在 SharkMinter 合约中进行操作;

5. SharkMinter 合约在收到用户收益的 LP 手续费之后,会将 LP 重新拆成对应的 WBNB 和 SHARK,重新加入到 Panther 的 WBNB/SHARK 交易池中;

6. 由于第 3 步攻击者已经事先将对应的代币打入到 SharkMinter 合约中,SharkMinter 合约在移除流动性后再添加流动性的时候,使用的是 SharkMinter 合约本身的 WBNB 和 SHARK 余额进行添加,这部分余额包含攻击者在第 3 步打入 SharkMinter 的余额,导致最后合约获取的添加流动性的余额是错误的,也就是说 SharkMinter 合约误以为攻击者打入了巨量的手续费到合约中;

7. SharkMinter 合约在获取到手续费的数量后,会通过 tvlInWBNB 函数计算这部分手续费的价值,然后根据手续费的价值铸币 SHARK 代币给用户。但是在计算 LP 价值的时候,使用的是 Panther WBNB/SHARK 池的 WBNB 实时数量除以 LP 总量来计算 LP 能兑换多少 WBNB。但是由于在第 2 步中,Panther 池中 WBNB 的数量已经非常多,导致计算出来的 LP 的价值非常高;

8. 在 LP 价值错误和手续费获取数量错误的情况下,SharkMinter 合约最后在计算攻击者的贡献的时候计算出了一个非常大的值,导致 SharkMinter 合约给攻击者铸出了大量的 SHARK 代币;

9. 攻击者后续通过卖出 SHARK 代币来换出 WBNB,偿还闪电贷。然后获利离开。

Related tags
ChainCatcher reminds readers to view blockchain rationally, enhance risk awareness, and be cautious of various virtual token issuances and speculations. All content on this site is solely market information or related party opinions, and does not constitute any form of investment advice. If you find sensitive information in the content, please click "Report", and we will handle it promptly.
Related tags
ChainCatcher Building the Web3 world with innovators