跳至主要內容

Sushiswap: 代币取空和重入攻击漏洞与流动性提供者攻击

tokenview大约 2 分钟

Sushiswap: 代币取空和重入攻击漏洞与流动性提供者攻击

2020年8月:代币取空与重入攻击漏洞

2020年8月28日,CertiK安全研究团队发现Sushiswap智能合约存在代币取空和重入攻击两大潜在漏洞。该漏洞导致1 至 1.5 万美元的损失。

代币取空:

根据两个function可以导致代币取空操作,setMigrator和migrate。

https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.solopen in new window

https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.solopen in new window

如果智能合约拥有者将migrator的值通过setMigrator指向一个包含恶意migrate方法代码的智能合约,那么该拥有者可以进行任何其想进行的恶意操作,甚至可能取空所有的账户内的代币。

重入攻击:

在上图142行中执行结束migrator.migrate(lpToken)这一行代码后,智能合约拥有者可以利用重入攻击漏洞,再次重新执行从136行开始的migrate方法或者其他智能合约方法,进行恶意操作。

2020年11月:流动性提供者攻击

2020年11月28日,Sushiswapopen in new window遭遇流动性提供者攻击,共计损失约1.5万美金。

攻击者利用智能合约的代码漏洞在提供流动性时将池子中所有的手续费代币(如SLP)取空。攻击者称并不知晓这是个漏洞,以为是获取更多收益的一种方法。

具体操作步骤如下:

  1. 攻击者往池子USDT-WETH添加流动性,获取SLP;

  2. 攻击者使用SLP-WETH给新的池子添加流动性,获取SLP1;

  3. 攻击者调用Sushi Maker的convert方法将得到的SLP1销毁,转成SLP和WETH,接着将得到的SLP兑换成WETH;
    问题就出在该步骤最后一步,由于合约代码漏洞,此处兑换的SLP是整个池子的SLP,而不仅是用户自己的SLP。

  4. 继续对其他流动性池重复该过程,持续获利。

上次编辑于: