Liquity 分叉项目中的漏洞第一部分

本文分析了 Liquity V2 分叉项目中常见的漏洞,包括不正确的过时阈值、关闭期间的边缘情况处理不当、Oracle 设置导致拒绝服务、不正确的部署参数以及价格操纵等问题。强调了在部署和审计 Liquity V2 分叉项目时需要注意的关键点,以确保系统的安全性和稳定性。

Liquity 分叉中的漏洞 第一部分

最近,我们的首席研究员 ZeroCipher 在 Cantina 上的 USDAF 比赛中取得了一项巨大的成就,Cantina 是 Liquity V2 的一个分叉。他是唯一一个在该比赛中获得全部 65000 USDC H/M 奖金的人。这是 Cantina 历史上第一次发生这种情况。

Image

ZeroCipher 将其归功于他们对整个 Liquity V2 代码库的扎实理解,这使他能够发现所有其他 SR 都错过的漏洞。

今天,我们将讨论协议安全部署 Liquity V2 的注意事项,以及 SR 有效审计 Liquity V2 分叉的方法。

120 秒了解 Liquity V2(思维模型):

Liquity V2 是 Liquity 协议的第二个版本。它作为一个稳定币发行协议,允许用户借入和发行稳定币,并以其抵押品作为担保。用户打开“trove”,在其中存入他们的抵押品,并借入稳定币。这些 trove 始终是超额抵押的,以防止不良债务。Liquity 协议对 trove 收取利息。Liquity 允许灵活的利率,最低为每年 0.5%。Liquity 允许 trove 所有者设置自己的利率。

利率也决定了你被“赎回”的可能性。在 Liquity V2 中,赎回意味着其他人可以支付你的巨额债务并获得你的抵押品。赎回按利率递增的顺序优先排序。因此,利率最低的 trove 将首先被赎回。

因此,trove 所有者必须在被赎回的可能性和不支付过高利息之间做出平衡。赎回允许机器人/用户以 1 美元的价格赎回本地稳定币,因此这是一种有助于维持稳定币Hook的机制,它允许机器人在外部市场上以低于Hook的价格购买它,然后在这里出售以获利。反过来,这有助于通过提高本地稳定币在外部市场上的价格来保持其Hook。

Image

图片来源:Liquity V2 文档

Liquity V2 有一个名为稳定性池的池。在这个稳定性池中,存款人可以存入本地稳定币以赚取利息。顾名思义,稳定性池充当稳定器。它用于在清算时偿还巨额债务以清算 trove。如果 trove 的抵押品比率低于分支的最低抵押品比率,它允许任何人通过调用清算函数来清算 trove。债务将由稳定性池偿还,抵押品将以折扣价转到稳定性池,从而导致 SP 提供商获利。

Liquity V2 隔离每个抵押品分支,以便在大多数情况下,分支的关闭不会影响整个系统。

核心参与者:

有四个主要核心参与者

  • 借款人(打开/调整“trove”)

  • 担保人/清算人

  • 赎回人

  • 稳定性/盈利池存款人

Liquity v2 分叉中的常见漏洞:

现在我们已经完成了描述。我们将讨论 liquity 分叉常见的漏洞:

不正确的过时阈值:

Liquity v2 对每个分支使用过时阈值。这样,如果抵押品的价格至少在过时阈值内没有更新一次,任何抵押品分支都将关闭。这个过时阈值应该是一个充分高于底层预言机心跳的值。这样,心跳之后价格更新传播中的任何网络延迟都不会导致任何分支关闭。它也不应该太高,以至于与心跳根本没有相关性。

处理关闭期间的边缘情况:

在 Liquity v2 比赛中,SR 发现了一个漏洞,如果在关闭情况下无法调整最后一个 trove,抵押品可能会卡在最后一个 trove 中。在 Liquity v1 分叉中,常见的情况是它们没有正确处理关闭边缘情况。因此,Liquity 分叉应该考虑在关闭中出现的边缘情况。

预言机设置不应拒绝服务赎回:

在 Liquity v2 中,所有赎回都会迭代所有活动分支(大多数情况下)。因此,如果任何预言机配置导致任何分支发生回滚。整个系统的整个赎回操作都将拒绝服务。因此,非常重要的是,任何预言机设置都不会在任何情况下导致任何回滚,并且可以优雅地处理失败的操作而不是回滚。

使用了不正确的部署参数:

Liquity v2 使用 CCR、MCR、BCR 等参数来确保每个分支的安全。应根据所使用的抵押品仔细考虑这些参数。此外,还有清算奖金等参数。在这些参数中使用任何此类错误值对于整个系统来说都将是灾难性的。

向上操纵的预言机考虑:

通常在 Liquity v2 中,应使用可靠的预言机。但是,假设无法获得资产的可靠预言机。建议使用辅助预言机或任何其他机制来缓解该特定分支中的向上操纵。由于分支中的向下操纵只会影响该特定分支。但是,向上操纵预言机价格会影响整个系统,因为它会导致以折扣价铸造本地稳定币,并可能导致稳定币脱钩。

使用了不正确的十进制数:

Liquity v2 期望抵押品具有 18 位小数。因此,分叉通常会将非 18 位小数的代币包装成 18 位小数的代币,以便在 liquity 中使用。但是,如果分叉没有考虑到这一点并直接在 Liquity v2 中使用非 18 位小数的代币,则会导致系统性漏洞。

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

0 条评论

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