去中心化金融(DeFi)协议Abracadabra遭遇攻击
去中心化金融(DeFi)协议Abracadabra因攻击者利用其批处理功能中的逻辑错误而损失了180万美元。根据区块链安全公司Hacken的分析,攻击者已经通过Tornado Cash洗钱。
Abracadabra的功能与设计
在十月初,Abracadabra作为一个DeFi借贷协议,允许用户使用存入的代币作为抵押品借入其稳定币Magic Internet Money(MIM)。该协议此前曾遭遇多次黑客攻击,这一次再次损失约180万美元。攻击者利用协议批处理功能中的逻辑错误,借款时未提供任何抵押品,正如几天前一个分叉项目所遭遇的情况。
Hacken在与crypto.news分享的研究报告中指出,Abracadabra的设计旨在让用户使用带息代币作为抵押品,借入一种名为MIM的美元挂钩代币。该系统由两个部分构成:Cauldron(锅炉),负责借贷规则;DegenBox,共享的资金池,实际持有代币。简单来说,用户在Cauldron中提供抵押品,而DegenBox在后台跟踪资金。
攻击的具体过程
“攻击者利用了Abracadabra的cook函数中的逻辑缺陷,借入MIM代币后立即重置了本应检查其抵押品是否充足的验证标志。”
问题的简要概述是:一个安全标志本应强制进行最终检查,以确认借款人是否确实有抵押品,但在一次交易中被关闭。Hacken的报告指出,攻击者利用了这一漏洞,能够在多个Cauldron中进行一次性无抵押借款。
以下是流程的简单说明。Abracadabra使用一个名为cook的批处理功能,允许用户在一次交易中执行多个操作。例如,用户可以在一次点击中存入抵押品并借款。在这些操作中,“借款”步骤会将一个名为needsSolvencyCheck的标志设置为true,意味着“在这笔交易结束时,检查借款人是否安全。”但在同一批处理中,另一个可以执行的操作调用了“_additionalCookAction(…)”。
Hacken指出,该函数被声明为“虚拟”,并且从未实现,因此默认返回一个空对象,其中所有内容都设置为false,包括needsSolvencyCheck标志。因此,攻击者调用了借款操作,然后调用了重置标志的默认操作,最终协议没有检查借款人的偿付能力。
攻击的后果与反应
分析师表示,攻击者一次性攻击了六个Cauldron,提取了大约179万MIM并兑换成ETH。攻击者利用了这一漏洞,系统地通过六个不同的Cauldron进行操作,使用相同的技术进行“专门的cook函数调用”。
在兑换后,攻击者通过Tornado Cash,一个加密混合协议,逐步转移资金,每次大约10 ETH,持续了一天多。
这并不是Abracadabra的CauldronV4代码首次出现问题。今年早些时候,其他事件也利用了同一系列合约中的不同边缘情况。现在有趣的是,分叉部署的反应速度。
根据报告,一个名为Synnax的分叉在Abracadabra被攻击前几天暂停或取消了其DegenBox上的CauldronV4主合约的白名单,基本上是分叉团队在发现相同的弱点模式后拉响了紧急刹车,这表明风险对监视代码的团队是可见的,尽管并未得到修复。