满币
满币
2020年11月30日,根据慢雾区,寿司交换的情报,以太琴的AMM代币交换协议遭到攻击,损失约15000美元。慢雾安全团队第一次介入分析,以简讯的形式做了一个分享,供大家参考。
背景概述
寿司交换项目中寿司制造商合约的功能是将每个交易对产生的手续费存储在寿司交换中。手续费将以SLP(流动性证明)的形式存入合约。sushimaker合约,中有一个convert函数,用于通过调用每个交易对的burn函数来获取对应的代币,然后将这些代币转换成寿司代币,添加到寿司吧合约Add收益,供在寿司吧抵押寿司代币的用户使用,这次的问题出在寿司制作人合约身上
攻击过程
1.攻击者在寿司交换中选择一个交易对,例如usdt/wet,然后添加流动性以获得相应的SLP(usdt/wet的流动性证书,以下称为SLP),并使用获得的SLP和少量wet创建一个新的寿司交换交易对。然后,新代币池的slp1(湿/SLP (usdt/wet)流动性证明,以下简称SLP1)被转移到苏希马克合约
2.调用Sushisswap的convert函数,传入的令牌0是第一步得到的SLP,令牌1是wet。调用convert函数后,Sushimaker合约将调用由token0和token1组成的令牌池的burn函数来烧录攻击者在Sushimaker合约第一步中打入的SLP1,得到wet和SLP。
3.Sushimaker合约的convert函数会调用internal _toWETH函数将burn得到的令牌转换成wet。第二步,苏西马克合约通过燃烧获得了SLP和韦瑟。其中,我们不需要转换,只需要转换SLP。此时,转换将通过调用SLP/韦瑟事务对来执行,这是攻击者在第一步中创建的事务对。由于在转换过程中,苏希马克合约会将所有的平衡值(令牌0)转换为天气,因此这里传递的令牌0是SLP。因此,合约将通过SLP/wet交易对交换合约的所有SLP(交换的SLP包括USDT/wet交易为每次交换生成的收益和合约通过第二步的burn函数获得的SLP)。SLP/wet令牌池是由攻击者创建的,攻击者在初始化时只需要添加少量的wet,就可以在交换过程中将少量的wet交换给寿司制作商合约对应交易对的所有SLP。
4.攻击者利用burn函数在SLP/wet交易对中烧他的SLP1,得到大量的SLP和少量的wet,对其他流动性池继续重复这个过程,继续获利。
摘要
攻击者利用SLP和wes创建一个新的令牌池,利用新令牌池的SLP1在Sushi Maker中进行转换,并利用少量的SLP将Sushimaker的合约中的所有SLP转移到自己创建的令牌池中,即在一段时间内将对应交易对的所有手续费装进口袋。并且对其他交易对重复这个过程,持续盈利。