本文详细分析了Abracadabra.money平台的攻击事件,攻击者利用了其CauldronV4合约中的债务计算机制漏洞,通过借贷、偿还策略操控资产与股权比例,最终导致约650万美元的损失。文章讨论了攻击的过程、漏洞原理以及如何防范类似攻击的建议,突显了DeFi领域的风险与复杂性。
Abracadabra.money 是一个借贷平台,允许用户通过抵押他们的数字资产借取以 MIM(Magic Internet Money)形式的稳定币。它基于 Sushiswap 的 KASHI 和 BentoBox 技术,但在抵押方式上有所区别。用户可以抵押带息代币(ibTKNs),本质上是流动性提供(LP)代币,以在各个链上铸造 MIM。这些 ibTKNs 具有逐渐累积价值的特性,提供持续的回报,随着持有时间的增加而变得更有价值。
该平台不仅限于借贷,还通过其 Cauldrons Technology 提供开设杠杆仓位的机会。当 MIM 代币被偿还时,它们会系统性地从流通中移除,有效地帮助管理市场供给。
在 Abracadabra.money 生态系统中,SPELL 代币扮演着双重角色。它不仅用于治理,还作为积极市场参与的激励。通过质押 SPELL 代币,用户可以获得 sSPELL 并根据其在池中的质押比例赚取一部分费用。此外,该平台还扩展了质押选项,包括 mSPELL、magicGLP、magicAPE 和 magicLVL 等代币。有关该协议功能的更多信息,请参考官方 文档。
在这一部分,你可以找到借贷的简要介绍以及它们在 Abracadabra Money 中是如何运作的。如果你已经熟悉这个主题,可以跳过此部分。
要更好地理解 Abracadabra Money 的运作,必须先了解传统 DeFi 借贷协议的操作方式。
简而言之,在传统 DeFi 中,智能合约促进各种借贷平台的运作,参与者:
借款人必须在智能合约中提供抵押物,如果未能按时还款或抵押物价值跌至某一阈值以下,则可能被贷方或其他人强制清算。
如果你想了解更多有关借贷攻击的信息,可以查看我们之前关于借贷协议的审核:Maple Finance - 2023年第四季度、Maple Finance - 2023年第二季度、Maple Finance - 2022年、Yeti Finance。
理解 Abracadabra Money 也需要熟悉 DeFi 中的稳定币贷款,其中贷款通常是超额抵押的,以保护抵御市场波动。这意味着抵押物的价值超过贷款金额。例如,借入 100 DAI 可能需要 150 美元的 ETH 作为抵押,超额抵押比例为 150%。贷款受抵押债务头寸(CDPs)管控,这些智能合约确保抵押比例保持不变,很多用户选择更高的比例以降低因市场波动而引发的清算风险。
虽然稳定币贷款存在清算风险,但它们为投资者提供了利用数字资产以获取潜在收益增强的机会,支持复杂的交易策略。通常来说,如上所述,DeFi 协议如 Curve、Yearn 和 SushiSwap 将 ibTKNs 作为贷款结构的一部分进行铸造。Abracadabra Money 利用这些 ibTKNs 作为稳定币贷款的抵押,创造一个更加去中心化的投资格局。它铸造了与美元Hook的稳定币 MIM,其独特之处在于其多链可转移性和不依赖集中数字资产作为抵押。
Abracadabra Money 使用创新合约进行借贷。DegenBox 处理用户资金和策略,而 Cauldrons 管理借款、清偿能力和清算。Oracles 确保稳定币的支持。Strategies 让 DegenBox 中的资金赚取利息。其他合约则简化了诸如杠杆和管理 Cauldron 参数等高级操作。该系统整合了各种组件以实现无缝的 DeFi 体验。详细的分解,最好查看官方文档。
此次攻击是通过一个来自 Tornado Cash 的 ETH 发起的。一般来说,漏洞存在于 CauldronV4 合约用于债务计算的股份机制中。这使得攻击者能够从 magicAPE 和 yvCrv3Crypto 中窃取 MIM 代币。在代码库中,base/part 代表借款股份(用户的总债务股份),而 elastic/amount 表示借贷资产数量。通常,用户获得的借贷股份与 totalBorrowAssets 和 totalBorrowShares 的比率成正比。然而,随着利息的累积,totalBorrowAssets 增加而没有相应的 totalBorrowShares 增加,从而使得用户的债务比例增长。
漏洞利用:
攻击是通过从平台的 DegenBox 获取 MIM 代币的闪电贷开始的。随后将这些代币存入 BentoBox,将 BentoBox 自身指定为接收者。
然后,攻击者利用借来的资金触发 repayForAll
函数,允许任何人偿还他人的债务。此函数不正确地减少了 totalBorrowAssets
而没有调整 totalBorrowShares
,扭曲了资产与股份的比率。
由于存在检查 totalBorrowAssets
必须高于 1000 ETH 的限制,因此攻击者无法偿还全部金额。因此,攻击者部分偿还了债务,操纵 totalBorrowAssets
使其大于该阈值。结果, totalBorrowAssets:totalBorrowShares
变为大约 1:26。为了继续减少资产金额,攻击者需要手动偿还其他借款人的负债。
这种扭曲进一步利用,通过偿还最后一个借款人几乎所有但极少量(100 wei)的股份,使得 totalBorrowedAssets
为 3, totalBorrowShares
为 100。
攻击者偿还了 1 wei 的股票三次,这意味着 totalAssets
降至 0,而 totalBorrowShares
剩余 97。此时,攻击者开始从他们的账户借入 1 wei。此时, totalBorrowAssets
为 1, totalBorrowShares
为 98。
从那时起,攻击者仅使用极少量的抵押物,只为 100 wei,开始了一个循环,在循环中他们借入 1 wei 的资产,然后偿还 1 wei 的借款股份。因为 totalBorrowShares
超过了 totalBorrowAssets
,借入 1 wei 的资产导致创建(铸造)了大量借款股份。然而,由于协议往往会有利于自己在向上取整,当攻击者偿还 1 wei 的借款股份时,即使它的价值接近于 0,协议仍然要求攻击者偿还 1 wei 的资产。
最终,这个循环使 totalBorrowShares
指数级膨胀,而 totalBorrowAssets
没有增加,实际上使股票的价值变得微不足道。
在膨胀借款股份后,攻击者将 totalBorrowAssets
设置为零,同时保持 totalBorrowShares
在一个膨胀水平。攻击者然后使用另一个账户以最低抵押物借走协议中的全部资金。
攻击者充分利用他们的可用资金,获得相应数量的借款股份,维持 1:1 的比例。
这是因为在借款过程中,当资产被转换为借款股份时,如果总借入资产金额为零,系统生成的借款股份的数量等于借入资产的数量。因此,攻击者借入了允许的最大金额,并获得了等量的借款股份。
在此时,重要的是要注意总借款股份的过高,几乎是无限的。当系统评估这个特定账户的风险时,它将借款股份转换回借入资产的数量,以评估借入金额。
结果是微不足道的,因为此账户持有的股份与参与此计划的另一个账户相比较为微小。系统错误地认为后者账户持有大量借款股份借入了大部分资金,而不是前者。这个误判使得该账户通过了协议的健康检查。
攻击流程:
为了防止类似攻击,使用股份计算来计算应付利息的借贷协议应该确保 totalBorrowAssets
与 totalBorrowShares
的比例不能被操控,从而使得 totalBorrowShares
可能膨胀而 totalBorrowAssets
仍然保持低值。此外,实施更强健的账户健康和核心不变性检查,以考虑股份和资产的潜在操控,也是有益的。
尽管大约 $6.5百万的金额变成了 坏账,但窃取的 MIM 换成 ETH 使得该稳定币失去了其Hook。尽管问题在攻击开始后不足一个小时已经被 团队修复,该协议的团队面临着恢复 MIM Hook(当前为 $0.98)的艰巨挑战。
在 官方承认 后,Abracadabra Money 宣布 他们从此次漏洞中恢复,并通过将受影响 Cauldron 的借贷限制设置为零来增强协议安全。他们已经 联系 攻击者,提供漏洞奖金,并与 Chainalysis 合作进行资金追踪和可能的法律行动。该协议的韧性还得到了强大的 1500 万美元 DAO 财库的支持,这将用于从市场回购 MIM 代币并销毁。同时,包括其扩展产品套件和流动性提供在内的操作均未受到影响,并计划在未来推出去Hook紧急资金,以加强对非法活动的 DAO 防护。
欲阅读完整博客文章,请访问 mirror.xyz。
攻击者地址:
被利用的合约:
致谢:Kankodu、EXVULSEC、Offside Labs
- 原文链接: threesigma.xyz/blog/abra...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!