|UniCats“开后门”钓鱼 十数万UNI“洗白”


时值国庆大假期间 , 加密钱包初创公司ZenGo的研究员亚历克斯·马努斯金(Alex·Manuskin)爆料称 , 有用户一夜之间损失了价值14万美元的Uniswap代币UNI , 而这与名为UniCats的“收益农场”有关 。
|UniCats“开后门”钓鱼 十数万UNI“洗白”
本文插图
据了解 , 一些参与DeFi提供流动性挖矿赚取收益的用户最近发现了UniCats这个新农场 。 从界面来看 , UniCats类似Yam Finance和SushiSwap;收益方面 , 不仅可挖矿本地MEOW代币 , 同时还可挖出包括UNI在内的其它代币 。
界面友好 , 产能不赖 , 资产入场 。
当用户准备提供流动性时 , UniCats弹出提示框 , 要求获取消费限制许可 , 而该许可的限制是:无限 。
用户可能怎么也不会想到 , 在这个无限消费的许可的背后 , UniCats开发者早已暗置了一个直通自家资产的“后门” 。 用户的资产可由此被悄悄转移至开发者指定的地址 。
【|UniCats“开后门”钓鱼 十数万UNI“洗白”】就这样 , 有大胆且不幸的“农夫”瞬间被窃取了价值14万美元的UNI , 而其他用户也有不同程度的损失 。
盗窃“现场”
那么 , UniCats开的这个“后门” , 又是如何对用户进行窃金操作的呢?
1、 盗窃 者首先将UniCats的owner权限转移给一个合约地址 。
2 、盗窃 者通过获得owner权限的合约地址调用UniCats的setGovernance方法 。
3、setGovernance函数调用对于代币的transferFrom函数 , 将用户 资产 转移到 盗窃 者地址 。
第2、3步为此次盗窃的核心步骤 , 如下图所示:
|UniCats“开后门”钓鱼 十数万UNI“洗白”
本文插图
“后门”分析
UniCats合约中的setGovernance函数是实现盗窃的关键 。 通过调用此函数 , UniCats合约即可作为调用者 , 能够向任意合约发起任意调用 。
据上图所示 , 调用该方法可输入两个参数 ,即一个地址类型的“_governance”和一个bytes类型的“_setData” 。 而函数的governance.call(_setupData)其实是表示向参数“_governance”地址发起一笔交易 , 其calldata为参数“_setData” 。 如此一来 , 只要有权限调用这个方法 , 便可以借合约的身份发起任意交易 。
在进行代码编写时 , 其注释表示此函数是一个修改治理合约的函数 , 如下图所示:
事实上 , 根据成都链安的审计经验 , 修改治理合约通常并不需要调用call 。 而且 , UniCats在对用户资产进行盗窃时 , 还刻意多次变换owner地址 , 如下图所示:
|UniCats“开后门”钓鱼 十数万UNI“洗白”
本文插图
不仅如此 , 资产在转出后还立刻被流入混淆器 , 如下图所示: