Resupply团队在关闭Prisma Finance时发现并解决Trove Manager的会计错误,以及ULTRA稳定池漏洞

  • wavey0x
  • 发布于 2025-01-18 17:42
  • 阅读 17

Resupply团队在关闭Prisma Finance时,发现并解决了Trove Manager的会计错误,避免了坏账的产生;同时发现了ULTRA稳定池的漏洞,并通过创新性的PSM机制解决了稳定币价格脱锚的问题,保障了用户的利益,目前关闭工作仍在进行中。

由于补给团队正为一个激动人心的启动做准备,一项烦人的任务占据了团队的注意力:关闭 Prisma Finance,这是一个被黑客攻击的 Liquity 分叉,此后变成了一艘幽灵船。Prisma Finance 曾经得到 Yearn 和 Convex 流动性锁仓产品的支持,但后来被其团队抛弃,使其处于脆弱状态。实际上,Resupply 最初被设想为 Prisma 的替代品,治理部门通过 PIP-46 批准了该方案。但解除该系统 оказалось 比预期的要棘手。

在这篇文章中,我将重点介绍我们如何:

  1. 发现并解决了 Trove Manager 会计中发现的一个关键漏洞,允许用户重新获得对其抵押品的使用权,并避免将坏账引入系统。
  2. 发现 ULTRA 稳定性池中的一个漏洞,该漏洞允许攻击者提取大约 13.92 ETH,这些 ETH 并不属于他们。
  3. 创建了一个创造性的解决方案,通过允许用户使用单独的稳定币来关闭他们的贷款,从而应对向上的脱锚。

暴露 Trove Manager 会计错误

随着 Prisma 的 TVL 不断减少(感谢 PSM,我将在后面的章节中描述),一个微妙的会计问题被提了出来。我注意到用户债务的总和与 trove 认为其总债务之间存在相当大的不匹配。

Alt text 借款总额超过总活跃债务。

显然,这里存在某种会计错误,寻找罪魁祸首的工作开始了。经过细致的代码检查和 Tenderly 的帮助,我能够将问题追溯到 openTrove() 函数。

Alt text Trove Manager 的 `openTrove()` 函数中的错误。

正如你所看到的,代码错误地使用了一个过时的值将状态更新写入 totalActiveDebt,该值不包括自上次检查点以来产生的利息。在正常操作期间,此错误在很大程度上是透明的,因为 totalActiveDebt 足够高,以至于在减去还款金额时没有下溢风险。但是如果差异足够大,并且随着 TVL 的下降,即使是适度的还款也可能触发它。事实上,该错误会使还款、赎回甚至清算变得不可能,因为当最终借款人偿还时,比如 1,000 美元,trove 管理器试图从 totalActiveDebt 中减去该金额(某个小于 1,000 美元的数字)将下溢。这些恢复的交易有效地困住了用户的抵押品。

后来发现,Prisma 在其 Trove Manager 代码的后期版本中引入了一个补丁。因此,此错误仅存在于旧版本的 trove 管理器中。

不幸的是,没有办法将此值恢复到应有的水平。此外,此时,治理部门已经将所有 Trove Manager 置于“sunsetting”模式,从而阻止了任何明显的干预方法。但是,我们发现了一个漏洞:治理部门仍然可以升级 oracle。

通过设置一个自定义 oracle,将抵押品的价格设置为 type(uint).max(实际上是无限的),用户可以提取他们的抵押品,减去少量的 dust 金额。从本质上讲,在给定的操纵价格下,用户只需要几个 wei 的抵押品就可以为未偿债务提供抵押。这项操作产生了大约 35,000 美元的坏账,因为陷入困境的用户摆脱了他们剩余的债务。

一个好消息是,我们发现了足够的资金来支付这笔费用,这些资金来自 Prisma 的 veCRV 投票者获得的未声明的 crvUSD。将此 crvUSD 转移到 PSM 现在意味着所有 mkUSD 都得到 1:1 的支持,并且该协议具有完全的偿付能力。

识别稳定性池漏洞

Alt text

12 月下旬,Discord 用户 pastelfork 指出了关闭过程中的一个新问题:来自 ULTRA 稳定性池存款人的抵押品收益无法被认领。经过一番审查,我们发现 ULTRA 的稳定性池中引入了一个错误。claimCollateralGains() 中的一行错误代码重置了一个应该被归零的值,错误地允许重复认领相同的金额,直到池被完全耗尽。

Alt text

...

Alt text

一名用户能够提取大约 13.92 ETH,这些 ETH 并不属于他。很有可能,他并不是为了发现这个错误而去的,而是偶然发现的。

查看 Etherscan,你可以看到他多次重复认领以耗尽池子的一个例子。

Alt text

为了防止进一步的滥用,发布了要求用户从 ULTRA 稳定性池中提取资金的呼吁。

稳定币囤积者引发向上脱锚

关闭 Prisma 首先将债务上限降至零,从而阻止了新的 mkUSD 和 ULTRA 贷款。但是,此举引发了一种破坏性的市场动态:Prisma 的稳定币 mkUSD 和 ULTRA 偏离了其 1 美元的Hook,最高升至 1.45 美元。发生这种情况的原因是借款人需要这些稳定币来关闭他们的贷款。机会主义交易者认为这是一个囤积这些代币的机会,从而推高价格,从而使最终的销售获利。

我们的解决方案在 PIP-47: Operation Rainbow Pegger 中宣布,该解决方案引入了自定义 Peg Stability Module (PSM) 的概念,该模块伪装成常规 Trove Manager,从而使其具有铸造新稳定币的权限。根据设计,PSM 通过以下关键功能提供稳定的双向购买:

  • repayDebt:接受 crvUSD,以 1:1 的比率铸造相应数量的 mkUSD/ULTRA,并以原子方式关闭用户的贷款。
  • sellDebtToken:销毁 mkUSD/ULTRA 并以 1:1 的比率返还 crvUSD。

这项创新通过为用户提供他们所需的流动性,并消除价格欺诈,使该协议摆脱了困境。PSM 将永久存在,以促进还款并充当赎回 mkUSD 和 ULTRA 的设施。

完成了自定义 UI 开发工作,以为用户提供一个与 PSM 交互的应用程序。

截至撰写本文时,PSM 的余额如下:

总结

关闭 Prisma 仍在进行中,剩余债务不到 8 万美元,但这远非易事。在经济漏洞和协议错误之间,该过程需要自定义工具、巧妙的工程设计和精细的操作,以确保用户以最小的伤害退出。该经验突出了解除 DeFi 协议的复杂性以及测试的重要性。

  • 原文链接: wavey.info/posts/2025/de...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
wavey0x
wavey0x
江湖只有他的大名,没有他的介绍。