参数校验不严谨:Superfluid被黑事件分析

  • SharkTeam
  • 更新于 2022-03-07 13:14
  • 阅读 3351

Superfluid被黑事件分析

2022年 2 月 8 日,以太坊上的 DeFi 协议 Superfluid 遭遇黑客攻击,损失超 1300 万美元。 image.png

SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

攻击者账户地址:0x1574f7f4c9d3aca2ebce918e5d19d18ae853c090

攻击者发起的攻击交易如下: image.png

整个攻击过程分析如下:

  1. 创建攻击合约。

交易Hash: 0xefdb283016fd9a7e09471fbc237431df5a4401625a1f3c21321496de65e52303

攻击合约:0x32d47ba0affc9569298d4598f7bf8348ce8da6d4 image.png

  1. 发起攻击。

(1)交易0xf9b4a3a64861e9feb27e21f3fc9c85e6d2851b8a097c71910585e3d7f374d8d8 image.png

该交易中并没有Token转账,因此判定该交易并不是攻击中盗取Token的关键交易。 image.png

通过其执行过程,发现该交易主要是调用了SuperAgreement合约中createIndex函数生成ctx数据,为后续攻击做准备工作。 image.png

(2)交易0x396b6ee91216cf6e7c89f0c6044dfc97e84647f5007a658ca899040471ab4d67

交易中Token转账记录如下: image.png 从上图中发现,攻击者从SuperToken合约中提取了QI、MATIC、WETH、USDC等多种Token。

交易的执行过程中,多次调用callAgreement函数。 image.png

image.png

其中,通过代理合约UUPSProxy调用Superfluid合约中的callAgreement函数,如下: image.png

image.png

其中构造的ctx如下: image.png

调用_callExternalWithReplacedCtx函数: image.png

在该过程中,调用了_replacePlaceholderCtx函数,合约如下: image.png

执行的参数与返回值如下: image.png

image.png

该函数将callData与ctx打包成了一个新的对象dataWthCtx,作为新的callData通过call函数执行合约SuperAgreement(0xB0aABBA4B2783A72C52956CDEF62d438ecA2d7a1)中签名值为0x232d2b58的函数, image.png

即updateSubscription函数: image.png

在调用updateSubscription函数,参数为dataWthCtx。该参数由用户自定义的callData以及函数生成的ctx打包而成,其中ctx应该作为updateSubscription函数中的最后一个参数bytes calldata ctx。但由于callData是用户自定义的,并没有对其格式进行校验,攻击者传递的callData参数中打包了自定义的ctx,因此通过call函数调用updateSubscription函数时,ABI 解码器仅会处理位于前面的数据而忽略掉后面的数据,即传递的参数ctx是攻击者自定义的,而不是callAggreement函数构造的ctx。 image.png

image.png

从整个攻击过程来看,Superfluid合约存在严重的逻辑漏洞,callAgreement函数缺少对参数的校验,使得攻击者将合约构造的ctx数据替换为自定义ctx数据,这给攻击者发起攻击提供了机会。

(3)交易0xdee86cae2e1bab16496a49b2ec61aae0472a7ccf06f79744d42473e96edd6af6 image.png

该交易将攻击合约中获得的多种Token(包括MATIC,QI,WETH,USDC,SDT,MOCA,STACK,sdam3CRV)转账到攻击者的账户地址。

  1. Token兑换 image.png

比如,交易0x9fdbcaefcd2bae1d873720ae8dfb741986818bfc1b5cf8af0a891b99b7bd14b1 image.png 交易中,攻击者将部分MATIC,WBTC以及USDC兑换成了WETH。

  1. 攻击启动资金来源分析

攻击者账户在Polygon上面部署攻击合约以及发起攻击所需要的MATIC来自于Ethereum, image.png

跨链交易0xbddcc89e7ce7d7e18693898f38fedf2ccd358ba81c8827dba403563436b4c43d: image.png

而Ethereum上面的ETH来自于Tornado混币平台。

混币交易0x8aa300ef83d2e18181328656871bf6854279d5f73fb9c43fc8074edf21913759: image.png

总结:本次攻击的根本原因在于,Superfluid合约存在严重的逻辑漏洞,callAgreement函数缺少对参数的校验,使得攻击者将合约构造的ctx数据替换为自定义ctx数据,这给攻击者发起攻击提供了机会。

二、安全建议

SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。

SharkTeam作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全。

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

更多区块链安全资讯与行业分析,点击下方链接查看 D查查|链上风险核查

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
SharkTeam
SharkTeam
0xC0f5...8888
SharkTeam是领先的Web3安全服务提供商,提供智能合约审计、链上分析和应急响应服务。 Web: https://www.sharkteam.org Telegram: https://t.me/sharkteamorg Twitter:https://twitter.com/sharkteamorg