北京时间8月28日,CertiK发现SushiSwap项目智能合约中存在多个安全漏洞。该漏洞可能被智能合约拥有者利用,允许拥有者进行包括将智能合约账户内的代币在没有授权的情况下取空等操作在内的任意操作。同时该项目智能合约还存在严重的重入攻击漏洞,会导致潜在攻击者的恶意代码被执行多次。
技术解析
MasterChief.sol:131
图片来源:https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol
在SushiSwap项目MasterChief.sol智能合约的131行中,智能合约的拥有者可以有权限来设定上图中migrator变量的值,该值的设定可以决定由哪一个migrator合约的代码来进行后面的操作。
MasterChief.sol:136 。
图片来源:https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol
当migrator的值被确定之后(如上图中142行代码显示),migrator.migrate(lpToken)也就可以被随之确定。由migrate的方法是通过IMigratorChef的接口来进行调用的,因此在调用的时候,migrate的方法中的逻辑代码会根据migrator值的不同而变化。
简而言之,如果智能合约拥有者将migrator的值指向一个包含恶意migrate方法代码的智能合约,那么该拥有者可以进行任何其想进行的恶意操作,甚至可能取空账户内所有的代币。
同时,在上图142行中migrator.migrate(lpToken)这一行代码执行结束后,智能合约拥有者也可以利用重入攻击漏洞,再次重新执行从136行开始的migrate方法或者其他智能合约方法,进行恶意操作。
该漏洞的启示(划重点)
· 智能合约拥有者不应该拥有无限的权利,必须通过社区监管及治理(governance)来限制智能合约拥有者并确保其不会利用自身优势进行恶意操作。
· 智能合约代码需要经过严格的安全验证和检查之后,才能够被允许公布。
当前SushiSwap项目创建者表示,已将该项目迁移到时间锁定(Timelock)合约,即任意SushiSwap项目智能合约拥
有者的操作会有48小时的延迟锁定。
在此CertiK技术团队建议大家在智能合约公布前,尽量寻找专业团队做好审计工作,以免项目出现漏洞造成损失。
北京时间8月31日和9月1日,CertiK安全研究团队发现Sushiswap仿盘的两个项目YUNo Finance (YUNO)与KIMCHI.finance (KIMCHI),其智能合约均存在漏洞。如果利用该漏洞,智能合约拥有者可以无限制地增发项目对应的代币数目,导致项目金融进度通胀并最终崩溃。
无限增发漏洞
以Yuno项目中智能合约为例,CertiK安全研究团队对于该无限增发漏洞进行了详细分析,技术细节如下:
在Yuno项目中的MasterChef.sol智能合约第1354行中,dev方法可以允许当前拥有devaddr身份的智能合约调用者,将devaddr身份转移给另外一个地址。
截图出自:
https://etherscan.io/address/0x450f143f1a8650fff968d890814bd5884bdc8f1d#code
下图中可以看到在智能合约1282行的mint方法是由修饰器onlyOwner进行限制,修饰器onlyOwner决定了只能是智能合约拥有者来执行这个合约。
以上三截图均出自:https://etherscan.io/address/0x450f143f1a8650fff968d890814bd5884bdc8f1d#code
拥有devaddr身份的调用者,当其身份恰好同时为owner身份的时候,可以通过调用MasterChef.sol智能合约1282行的mint方法,来无限制的增发代币。1282行的mint方法会继续调用1130行的mint方法,并继续由1130行mint方法调用1044行的_mint方法,并最终完成代币增发的操作。
Kimichi项目智能合约中存在的无限增发漏洞与以上漏洞基本相同,因此在这里不进行重复叙述。
如果owner和devaddr的地址如果相同,那么在外部没有对智能合约拥有者限制的情况下,智能合约拥有者拥有权利增发任意数量的代币,这将会将投资者置于风险之中。那么Yuno和Kimichi这两个项目中的devaddr和owner是否为同一人呢?是否有其他外部制约机制可以限制这两个项目的智能合约拥有者呢?
下图为Yuno项目MasterChef.sol智能合约中拥有devaddr和owner身份的地址(截止北京时间9月1日晚11点)。
截图出自:https://etherscan.io/address/0x9dd5b5c71842a4fd51533532e5470298bfa398fd#readContract
下图为Kimichi项目中KimchiChef.sol智能合约中拥有devaddr和owner身份的地址(截止北京时间9月1日晚11点)。
截图出自:https://etherscan.io/address/0x9dd5b5c71842a4fd51533532e5470298bfa398fd#readContract
从上两图中可以看到,Yuno项目中拥有devaddr和owner身份的地址为同一个,因此其智能合约拥有者有权利进行无限制的代币增发。而Kimichi项目中拥有devaddr和owner身份不同,但由于devaddr的身份可以进行转移,因此也存在一定的风险。
目前措施
为了确保无限增发漏洞不会被触发,对于Yuno和Kimichi两个项目的智能合约拥有者必须由外部进行限制。当前已经实施的限制条件与Sushiswap项目一致,即对任何由智能合约拥有者进行的智能合约操作,均有48小时的延迟。任何来自智能合约拥有者的操作都会被所有投资者观察到,并有48小时进行应对操作。
建议
- 当前DeFi以及相关Farming项目异常火爆,由于区块链项目对于项目代码公开性有要求,因此上线新项目门槛极低。如果盲目借鉴其他项目,任意漏洞都可能被引入到项目中。因此在项目上线之前,应该对项目进行严格的安全审计。
- 从投资者角度,当前Farming项目动辄百分之几千的回报率,极易促使投资者在没有对项目本身有足够了解的情况下进行盲目投资。例如SushiSwap,Yuno以及Kimchi三个项目均没有经过严谨的安全验证就快速上线。投资者可能会被巨大的利益回报迷惑,将宝贵资金投入到有极大风险的智能合约中。
发表评论
您还未登录,请先登录。
登录