前⾔
2022年2月8日,知道创宇区块链安全实验室 监测到以太坊上的 DeFi 协议 superfluid 遭遇黑客攻击,损失超1300万美元。实验室第一时间跟踪本次事件并分析。
攻击涉及基础信息
Superfluid:0xEBbe9a6688be25d058C9469Ee4807E5eF192897f
攻击交易hash:0x396b6ee91216cf6e7c89f0c6044dfc97e84647f5007a658ca899040471ab4d67
黑客地址:0x1574F7F4C9d3aCa2EbcE918e5d19d18aE853c090
攻击合约地址: 0x32D47ba0aFfC9569298d4598f7Bf8348Ce8DA6D4
漏洞分析
漏洞核心
此次漏洞核心在于函数callAgreement,该函数主要作用在于提供一个名为"ctx"的数据结构,“ctx”被用于协议间的通信共享。而此次事件的攻击者就是对”ctx“数据进行了 伪造,达到欺骗合约的目的。
漏洞利用
为什么假数据会被采用以及攻击者是如何构造假“ctx”数据的?
从交易中可以看到攻击者是直接在callData结尾处传入了假“ctx”,同时真“ctx”数据也被构建出来了的,只是程序在处理数据时会将callData数据与“ctx”打包成一个对象,当协议对该对象进行解码时,ABI解码器仅会处理位于前面的数据而忽略掉后面的数据。
而构建一个假“ctx”数据也并不复杂,由于“ctx”结构末尾为全零所以仅需要仿照“ctx”结构将其直接添加在userData中,以下是官方示例如何构建一个假“ctx”:
总结
本次攻击事件在于协议数据处理时无条件信任来源数据,应当对用户数据与官方构造数据进行标识区分。近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。