DeFi 协议 Abracadabra 因攻击者利用其批处理函数中的一个简单逻辑错误而损失了 180 万美元。Hacken 的分析师表示,攻击者已经通过 Tornado Cash 洗钱。
- 攻击者利用了 Abracadabra 批处理功能中的一个简单逻辑错误,导致其损失近 200 万美元,类似于几天前对一个分叉项目的攻击。
- 攻击者绕过了用于检查借款人是否有足够抵押品的安全标志,一次性耗尽了六个 Cauldron,然后将被盗的 MIM 换成ETH ,并通过 Tornado Cash 进行路由。
- 这并不是 Abracadabra 的代码第一次成为攻击目标,但该事件凸显了一个未实现的小功能如何让黑客有机可乘,即使在分叉中也发现了同样的缺陷。
10 月初,DeFi 借贷协议 Abracadabra 曾遭受过多次黑客攻击,该协议允许人们使用存入的代币作为抵押品借入其稳定币 MIM。区块链安全公司 Hacken 的分析师在与 crypto.news 分享的一份研究报告中表示,这次攻击者再次利用协议批处理功能中的一个简单逻辑错误,在不提供任何抵押品的情况下进行借款,导致 Abracadabra 再次损失约 180 万美元,就像几天前一个分叉项目遭受攻击一样。
Abracadabra 的推出旨在让人们使用有息代币作为抵押品,借入一种名为 Magic Internet Money(简称 MIM)的美元挂钩代币。该系统由两部分组成:Cauldrons(负责处理借贷规则)和 DegenBox(实际存储代币的共享金库)。简而言之:您将抵押品存入 Cauldron,DegenBox 负责在后台跟踪资金。
简而言之,问题出在:一个安全标志,原本应该强制检查借款人是否拥有足够的抵押品,却在单笔交易中被关闭了。正如 Hacken 的报告所述,攻击者“利用了 Abracadabra 的 cook() 函数中的一个逻辑缺陷,借入 MIM 代币后,立即重置了原本应该检查其是否拥有足够抵押品的验证标志”。这导致攻击者可以跨多个 Cauldron 进行一次性、无抵押的借款。
在显微镜下
简单来说,这个流程的工作原理如下。Abracadabra 使用一个名为cook()的批处理函数,以便用户可以在一次交易中执行多个操作。比如,一次点击即可存入抵押品并借款。其中一个操作,例如“借款”步骤,会将一个名为needsSolvencyCheck的标志设置为 true,意思是“在本次交易结束时,检查借款人是否安全”。

但是可以在同一批次中运行的另一个操作调用“_additionalCookAction(…)”。正如 Hacken 指出的那样,该函数被声明为“虚拟”并且从未实现,因此默认情况下它返回一个空对象,其中所有内容都设置为 false,包括needsSolvencyCheck标志。
结果,攻击者调用了借入操作,然后调用了重置标志的默认操作,最后,协议从未检查偿付能力。
分析人士称,攻击者一次性攻击了六个 Cauldron,窃取了大约 179 万个 MIM 并将其兑换成ETH。分析人士解释说,攻击者利用了漏洞,系统地攻击了六个不同的 Cauldron,并“使用相同的技术,通过专门的 cook 函数调用”耗尽了每个 Cauldron。

交换后,攻击者通过加密混合协议 Tornado Cash 转移资金,大部分是每笔 10 ETH ,并在接下来的一天逐渐发送。
这并非 Abracadabra 的 CauldronV4 代码第一次陷入困境。今年早些时候,其他事件也涉及了同一类合约中的不同边缘情况。现在值得关注的是,分叉部署的反应速度之快。
据报道,在 Abracadabra 漏洞暴露前几天,一个名为 Synnax 的分叉在其自己的 DegenBox 上暂停或取消了对其 CauldronV4 主控的白名单,因此,分叉团队在发现相同的弱点后拉下了紧急刹车,这表明,即使没有修复,观察代码的团队也能看到风险。