2022 年 10 月 27 日,据 Beosin-Eagle Eye 态势感知平台消息,ETH 链上的 Team Finance 项目遭受黑客攻击。
随后 Team Finance 在官方推文表示,该平台已在漏洞利用后暂停了所有活动,并敦促黑客「与我们联系以支付赏金」。据悉,Team Finance 及其母公司 TrustSwap 成立于 2020 年,他们主要为项目高管提供代币流动性锁定和归属服务。该协议声称在 12 个区块链中获得了 30 亿美元的担保。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
Beosin 安全团队通过分析发现黑客通过 LockToken 合约的 migrate 函数的漏洞,将 WTH,CAW,USDC,TSUKA 代币从 V2 流动性池非法升级到 V3 流动性池,并且通过 sqrtPriceX96 打乱 V3 流动池的 Initialize 的价格,从而获取大量 refund 套利。共计套利了约 1300 多万美元。具体分析结果如下:
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
事件相关信息
攻击交易
0xb2e3ea72d353da43a2ac9a8f1670fd16463ab370e563b9b5b26119b2601277ce
攻击者地址
0x161cebB807Ac181d5303A4cCec2FC580CC5899Fd
0xBa399a2580785A2dEd740F5e30EC89Fb3E617e6E
攻击合约
0xCFF07C4e6aa9E2fEc04DAaF5f41d1b10f3adAdF4
被攻击合约
0xE2fE530C047f2d85298b07D9333C05737f1435fB
攻击流程
1.漏洞函数介绍:被攻击合约 0xE2fE530C047f2d85298b07D9333C05737f1435fB(LockToken 合约)中 migrate 函数支持用户将指定的 Uniswap-V2 流动性迁移到 Uniswap-V3 流动性,会根据迁移后的价格退还部分代币给用户。函数的所有调用判断如下图所示,对锁定 ID,锁定时间,可提取地址都有判断。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
2.攻击前的准备:攻击者 0x161cebB807Ac181d5303A4cCec2FC580CC5899Fd 首先部署了攻击合约 0xCFF07C4e6aa9E2fEc04DAaF5f41d1b10f3adAdF4 以及创建了代币合约 0x2d4abfdcd1385951df4317f9f3463fb11b9a31df(代币 A)。
3.攻击者前往 LockToken 合约调用其 lockToken 函数,进行了 4 次锁定,锁定的是自己创建的代币 A,并将提取地址设置为攻击合约地址,获得了 4 枚 NFT 作为凭证(id 为 15324,15325,15326,15327)。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
lockToken 函数可以锁定用户的代币,并铸造一枚 NFT 代币作为凭证。锁定代币的类型,锁定数量,由谁提取,锁定时间均可以指定。
4.调用 LockToken 合约中的 extendLockDuration 函数,调整每一枚 NFT 代币所对应的锁定时间。至此,准备已经完成。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
5.攻击合约查询 LockToken 合约中的指定 LP 代币的数量,并将返回结果作为攻击参数中的一环。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
攻击者调用 migrate 函数,由于事前准备了 NFT 的缘故。migrate 函数关于 id 和锁定时间,提取地址的验证全部被绕过。函数的漏洞一下子暴露出来,验证浮于表面。通过锁定代币 A 获取的 NFT id 竟然可以参与到 FEG-WETH pair 的迁移中,并未检测用户锁定的和正在操作的是否一致,并且与 UNI-V3 迁移价格计算相关的参数 sqrtPriceX96 也是由用户进行输入。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
6.攻击合约使用提前准备的 4 枚 NFT,获得了 WETH,DAI,CAW,TSUKA 这 4 种代币的迁移退款。并将其全部发送到 0xBa399a2580785A2dEd740F5e30EC89Fb3E617e6E 地址。
![套利约1300多万美元,嚣张黑客如何套取Team Finance巨额资产?](https://www.web3sj.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
漏洞分析
本次攻击主要利用了 LockToken 合约中 migrate 函数的漏洞。migrate 的验证容易被绕过且可以操纵迁移时的价格。
资金追踪
截止发文时,被盗资金 880.258 个 ETH,642,9327.6 个 DAI,74,6136,5757,7043 个 CAW,1183,7577.7TSUKA,总价值约 1300 万美元,通过 Beosin Trace 追踪发现目前被盗资金还在攻击者地址 0xBa399a2580785A2dEd740F5e30EC89Fb3E617e6E 中。
事件总结
针对本次事件,Beosin 安全团队建议:重要函数的参数校验一定要仔细,尤其是用户可控的参数。项目上线前,建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。
(声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议)