Prisma Finance 的 MigrateTroveZap 合约存在漏洞,允许攻击者操纵 Trove 所有者的抵押品,导致损失约 3479.24 ETH。攻击者通过直接调用闪贷并绕过输入验证,关闭并重新打开 Trove 所有者的 Trove,从而提取部分抵押品。Prisma 团队已暂停协议并建议用户撤销对 MigrateTroveZap 的授权。
MigrateTroveZap
合约(mkUSD 和 ULTRA)两个版本中都存在一个漏洞,导致 3,479.24 ETH 的损失,约合 1200 万美元。BorrowerOperations
合约上的 setDelegateApproval(MigrateTroveZap, True)
来管理其 Trove 的仓位。onFlashloan
函数中缺少输入验证,导致了这个问题,这使得攻击者能够操纵合约的行为并拿走一部分 Trove 所有者的抵押品。MigrateTroveZap
的任何有效授权。Prisma Finance 部署了一个名为 MigrateTroveZap
的合约,以方便 Trove 所有者将其 Trove(抵押债务头寸)迁移到新的 TroveManager 合约。 这是 2024 年 3 月 宣布 的更广泛的系统升级的一部分。
作为这些更新的一部分,Prisma 弃用了最初的 4 个利率上限为 4% 的 LST (Liquid Staking Token) 金库,并用允许更高利率的新 LST 金库取而代之。 同时,3 个 LRT (Liquid Restaking Token) 金库也被弃用,并被替换为针对更高效赎回进行了优化的新版本。
Prisma 构建了 MigrateTroveZap
助手合约以确保平稳过渡,使 Trove 所有者能够无缝地将其 Trove 头寸从旧的 TroveManager
合约转移到新的合约,而无需关闭头寸、移除流动性或产生额外成本。该合约使用闪电贷来关闭用户的旧 Trove,并立即在新的 TroveManager
中以相同的抵押品和债务打开一个新的 Trove,所有这些都在一个原子交易中完成。
这些更改遵循了 Prisma 的标准 DAO 治理流程,迁移从 2024 年 3 月 20 日部署 MigrateTroveZap
合约开始,第一个 Trove 所有者从 3 月 23 日开始使用助手合约迁移 Trove。
2024 年 3 月 28 日 11:25 UTC,一名攻击者(攻击者 1]( https://etherscan.io/address/0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202)) 在 MigrateTroveZap
合约中进行了一笔交易,导致约 3,257 ETH(约合 1100 万美元)从一些 Prisma Finance Trove 所有者处转移。 紧随其后的是另外两名攻击者(攻击者 2 和 攻击者 3),他们设法转移了较小数量的 ~121 和 ~52 wstETH。 该事件的发生是由于 onFlashloan()
函数中的输入验证不足,这使得用户可以操纵输入数据并执行意外的合约行为。
受影响的 Trove 所有者之前已使用迁移合约从 TroveManager
v1 迁移到 v2。 这涉及在 BorrowerOperations
合约中设置委托批准,并将 MigrateTroveZap
作为参数。 尽管该漏洞影响了 mkUSD 和 ULTRA 的 MigrateTroveZap
合约以及所有 TroveManagers
,但只有 mkUSD 的 wstETH Trove 成为攻击目标。
Prisma 团队已建议 Trove 所有者撤销委托批准,并宣布了一个方便的流程,可以在 Prisma 应用程序上执行此操作。 该团队还暂停了协议,不允许添加新的抵押品并阻止进一步的损害。 一旦取消暂停,任何未完成的 zap 批准仍然会存在这个问题。
0x82be0b96
,发起交易。BorrowerOperations
上的委托批准Paused()
攻击者通过以下步骤利用了该漏洞:
onFlashloan()
。TroveManager
中重新打开它。 该交易导致所有者的头寸被关闭并重新打开,导致 Trove 所有者拥有一个具有相同债务但更少抵押品的新头寸,并且抵押品的差额位于 zap 合约中。MigrateTroveZap
合约对其进行迁移,从而有效地将剩余的抵押品用于他们自己的 Trove。该事件是通过一系列针对各个易受攻击的 Trove 的交易进行的。 下图是第一笔交易的简化资金流,其中 wstEthTroveManagerV2
( 0x1cc) 将受害者的抵押品发送给 MigrateTroveZap
,然后将其发回给 wstEthTroveManagerV2
,最后将金额发送给合约 ( 0xd99)。
来源: Phalcon
攻击者关闭了 TroveOwner 的有效 Trove,该 Trove 以 1745.08 wstETH 抵押品和 1,442,100 mkUSD 债务开放。 Trove 所有者的 Trove 立即以 463.18 wstETH 抵押品和 1,443,398 mkUSD 债务重新打开。 这将抵押品比率从大约 498% 降低到 132%,使其面临清算风险。
来源: Phalcon
攻击者继续开设了一个小型 Trove,其中包含一个 wstETH 抵押品和 2,000 个 mkUSD 债务。 他们使用 MigrateTroveZap
迁移了该头寸,并重新打开了一个 Trove,该 Trove 继承了合约中的剩余 wstETH。 重新打开的 Trove 拥有 1,282.79 wstETH 抵押品和 2,001.8 mkUSD 债务。
来源: Phalcon
最后,攻击者关闭了 Trove,收到 1,282.79 wstETH,并偿还了所有必要的闪电贷给 Balancer 和 Prisma。
来源: Phalcon
MigrateTroveZap
的闪电贷函数 - 来源: ContractReader.io
Prisma 中的暂停是一种安全机制,可在紧急情况或不可预见的问题期间停止某些操作。 暂停后,诸如打开新金库、增加抵押品或债务以及存入稳定性池等功能将被禁用。 但是,用户仍然可以提取抵押品,以最大程度地减少资金被锁定的风险。 在该事件的背景下,暂停可能通过禁用新的 Trove 和抵押品添加来防止进一步的事件发生。
名称 | 地址 |
---|---|
攻击者 1 (EOA) | 0x7E39E3B3ff7ADef2613d5Cc49558EAB74B9a4202 |
攻击者 2 (EOA) | 0x7Fe83f45e0f53651b3ED9650d2a2C67D8855e385 |
攻击者 3 (EOA) | 0x7C9FC6E2B908e858F30c5c71a20273315Efd5cf8 |
攻击者 1 合约 | 0xd996073019c74b2fb94ead236e32032405bc027c |
攻击者 2 合约 | 0x4148310fe4544e82f176570C6c7B649290a90E17 |
攻击者 3 合约 | 0x1b8A9F9F5a1d9cB1C28D9120F9c2bD073ccfAC04 |
MigrationTroveZap (mkUSD) | 0xcC7218100da61441905e0c327749972e3CBee9EE |
MigrationTroveZap (ULTRA) | 0xC3eAf094e2586965244aB6534f6Dc69c6C16b5D5 |
mkUSD 合约 | 0x4591dbff62656e7859afe5e45f6f47d3669fbb28 |
新的 wstETH TroveManager | 0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6 |
Borrower Operations (LST) | 0x72c590349535AD52e6953744cb2A36B409542719 |
Prisma Emergency msig | 0x7A28A80DcE1733944Db5dC50dc2c5147eC993C5A |
攻击者1 资金接收者 | 金额 | 哈希 |
---|---|---|
0x2d413803a6eC3Cb1ed1a93BF90608f63b157507a |
757.69 ETH | 链接 |
0x57f7033F84894770F876bf64772E7EBA48990D65 |
1,500 ETH | 链接 |
0x5d0064f3B54C8899Ab797445551058Be460C03C6 |
1,000 ETH | 链接 |
攻击者2 资金接收者 | 金额 | 哈希 |
---|---|---|
0x7fe83f45e0f53651b3ed9650d2a2c67d8855e385 |
138.19 ETH | 链接 |
攻击者3 资金接收者 | 金额 | 哈希 |
---|---|---|
0x7C9FC6E2B908e858F30c5c71a20273315Efd5cf8 |
52.32 wstETH | 链接 |
地址 | 事件前抵押品 | 事件后抵押品 | 事件时间戳 |
---|---|---|---|
0x56A201b872B50bBdEe0021ed4D1bb36359D291ED | 1745.08 wstETH | 463.18 wstETH | 上午 11:25:11 +UTC |
0x774bb9306df1cd921eb842b1388c78f75e6ef79f | 172.18 wstETH | 149.36 wstETH | 上午 11:28:11 +UTC |
0xcbfdffd7a2819a47fcd07dfa8bcb8a5deacc9ea8 | 824.6 wstETH | 192.12 wstETH | 上午 11:29:11 +UTC |
0xc47fae56f3702737b69ed615950c01217ec5c7c8 | 40 wstETH | 11.69 wstETH | 上午 11:36:47 +UTC |
0x3b15cec2d922ab0ef74688bcc1056461049f89cb | 107.18 wstETH | 18.89 wstETH | 上午 11:43:23 +UTC |
0x1b72bac3772050fdcaf468cce7e20deb3cb02d89 | 166.41 wstETH | 47.49 wstETH | 上午 11:45:47 +UTC |
0x3b15cec2d922ab0ef74688bcc1056461049f89cb | 18.89 wstETH | 18.97 wstETH | 上午 11:48:11 +UTC |
0x16f570e93fdbc3a4865b7740deb052ee94d87e15 | 113.6 wstETH | 32.4 wstETH | 上午 11:53:47 +UTC |
0xf9ca66ef84c773fab422562ab41b1ee8d4397418 | 47.3 wstETH | 15.48 wstETH | 上午 11:54:47 +UTC |
0xc487370895f6e8f5b62d99bf1472c95a94073379 | 377.2 wstETH | 95.6 wstETH | 下午 12:07:47 +UTC |
0x9fceded3a0c838d1e73e88dde466f197df379f70 | 356.28 wstETH | 102.12 wstETH | 下午 12:12:47 +UTC |
地址 | 事件前抵押品 | 事件后抵押品 | 事件时间戳 | ||||
---|---|---|---|---|---|---|---|
0x14b30b46ec4fa1a993806bd5dda4195c5a82353e | 4.22 wstETH | 1.21 wstETH | 下午 12:42:11 +UTC | ||||
0x19562df3e7fd2ae7af4e6bd288b04c2c90405212 | 31.22 wstETH | 9.15 wstETH | 下午 12:46:35 +UTC | ||||
0x1b004189e64d5b2f71d5be554470e6c49e10123b | 21.74 wstETH | 5.98 wstETH | 下午 12:46:59 +UTC | ||||
0x3b82ee6c15b212ed69d5795bcd957e136eaa4bff | 13.02 wstETH | 3.45 wstETH | 下午 12:47:11 +UTC | ||||
0x409c6c5ec5c479673f4c09fb80d0f182fcff643e | 3.8 wstETH | 0.93 wstETH | 下午 12:47:23 +UTC | ||||
0xc47fae56f3702737b69ed615950c01217ec5c7c8 | 11.69 wstETH | 11.78 wstETH | 下午 12:49:11 +UTC | ||||
0xf8d1c9ab49219f7acf7b1d84705e5aea3b8ce0aa | 17.85 wstETH | 17.93 wstETH | [下午 12:4 | 地址 | 事件前抵押品 | 事件后抵押品 | 事件时间戳 |
--- | --- | --- | --- | ||||
0xf8d1c9ab49219f7acf7b1d84705e5aea3b8ce0aa | 70.3 wstETH | 17.85 wstETH | 12:49:35 PM +UTC | ||||
0x3b82ee6c15b212ed69d5795bcd957e136eaa4bff | 3.45 wstETH | 3.52 wstETH | 12:50:23 PM +UTC | ||||
0x409c6c5ec5c479673f4c09fb80d0f182fcff643e | 0.93 wstETH | .99 wstETH | 12:50:35 PM +UTC |
拥有未平仓 Vault 的用户应前往撤销授权页面,并按照其中的说明进行操作。
Prisma 团队以及许多其他人正在继续调查并努力与攻击者沟通。
虽然 сейчас检索所有 Trove 所有者的资金是我们目前的主要重点,但在我们确定所有头寸都安全后,取消暂停协议将是下一步的一部分。
一旦制定出计划,将发布进一步的步骤。
感谢来自 HyperNative Labs 的 Dan,他是第一个直接与我们联系的人。
我们向 Llama Risk 和 Wavey 表示感谢,感谢他们在汇编信息和撰写本报告方面的宝贵帮助。他们的奉献精神和专业知识显着提高了我们分析的质量和深度。
我们非常感谢我们的朋友和贡献者加入我们的作战室,从我们响应的开始就提供他们坚定不移的支持和见解。 他们的合作和迅速行动对于应对这些挑战至关重要。
我们很高兴能依靠我们的历史安全合作伙伴 MixBytes 的支持和专业知识。
特别鸣谢 ZachXBT 的深入帮助。 事实证明,他的观察对于及时果断地解决问题是必不可少的。
感谢所有伸出援手提供帮助和协助的人。 我们感受到的来自社区的团结是一种不可思议的支持,将有助于应对下一个挑战。
- 原文链接: hackmd.io/@PrismaRisk/Po...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!