返回文章列表

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


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

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


代币取空:

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

https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol

https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol


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


重入攻击:

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


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


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


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


具体操作步骤如下:


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


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


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


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


步骤3代码漏洞截图如下:

图1 - covert函数

图2- _toWETH函数

记录本次交易的交易hash:0x7340edca1a17fc9e5a6587d6a89c0ed01c5d1f1d20cb19738ab993f6ef7b8b4d

此次操作被 SushiSwap (SUSHI)社区治理人 0xMaki 发现后,0xMaki 向攻击者发送了一笔交易并附上留言称「我发现你了,我们正在努力修复。在 Discord 上与我联系以获取漏洞赏金- 0xMaki」。查看交易详情



查看Defi项目列表

最近搜索