BlockSec | Resupply 协议攻击事件的深度分析和思考

admin 2025年7月4日10:25:59评论8 views字数 7338阅读24分27秒阅读模式

2025 年 6 月 26 日,稳定币协议 Resupply[1] 在以太坊主网部署的合约遭受攻击,损失了约 $10M 的资产。由于相关合约的价格预言机(price oracle)的实现方式存在问题,导致对于新创建的低流动性Market,攻击者可以通过 donation attack 操纵借出资产(Resupply 发行的稳定币 reUSD)的相对价格(即借出资产和抵押资产的兑换比例,exchange rate)使其为 0,从而绕过资产健康度检查,借出大量 reUSD 获利。

BlockSec 在全网最先公开预警后提供了初步分析[2, 3],Resupply 在之后也发布了官方公告[4],但对很多技术细节并未作详细阐述,本文将提供更为详尽的分析;另一方面,攻击发生后项目方及其相关方之间也发生了激烈的社区争议[5],本文将深入分析并探讨该协议背后复杂的生态关联,供读者参考。

 1 背景 

1.1 关于 Resupply 协议

Resupply 是一个去中心化的稳定币协议[1],属于Curve生态。Resupply 所发行的稳定币叫做 reUSD,这是一种由抵押债务头寸 (CDP) 支持的去中心化稳定币,由在外部平台的借贷市场赚取利息的其它稳定币---包括crvUSD和frxUSD---支持,用户可通过提供 crvUSD 和 frxUSD 借出 reUSD,实现稳定币资产再融资。

BlockSec | Resupply 协议攻击事件的深度分析和思考

具体而言,用户可以在某个部署在链上的 Resupply Market 实现借贷的相关操作。Market 的创建和行为通过 DAO 来管理,每一个 Market 指定一个 ERC-4626 Vault 作为抵押物资产(collateral),并以该Vault 对应的 asset 作为标的资产(underlying)。用户通过在 Market 中存入抵押物(Vault 或者 Vault 的 asset),借出 reUSD。

以攻击涉及的 Market 0x6e90 以及 Vault 0x0114 为例,其涉及的相关资产(token)如下:

  • Market 0x6e90:

    • underlying: crvUSD

    • collateral: cvcrvUSD (即 Vault 0x0114)

    • borrowed: reUSD

  • Vault 0x0114:

    • asset: crvUSD(实际保存在 Curve LlamaLend Controller,也是一个 Market,对于理解攻击不重要)

    • collateral: wstUSR (即 Curve LlamaLend Controller 的抵押资产)

    • borrowed: crvUSD (即 Curve LlamaLend Controller 的借出资产)

    • share: cvcrvUSD(即 Vault 自身,ERC-4626 token),是 asset 对应的 share

也就是说,用户可以在该 Market 抵押一定数量的 cvcrvUSD(或 crvUSD,但实际也会通过 Vault 转化为 cvcrvUSD)借出 reUSD,如图所示:

BlockSec | Resupply 协议攻击事件的深度分析和思考

1.2 如何判断用户是否有资格借出某种资产?

和一般的借贷协议类似,Resupply Market 也会对用户的头寸做资产健康度检查(通过 modifier isSolvent)。

BlockSec | Resupply 协议攻击事件的深度分析和思考

isSolvent 最终会调用 _isSolvent 函数,并在这里检查 LTV(Loan-to-Value,贷款价值比或借贷率),要求用户借出资产和抵押资产之间的比率 LTV 不能超过系统设定的最大值(_ltv <= maxLTV)。

可以看出,上述 LTV 的计算依赖于 exchange rate (代码中的_exchangeRate),即借出资产相较于抵押资产的价格(兑换比例)。

 2 攻击分析 

2.1 Root Cause 分析

从合约代码的角度而言,导致攻击的关键为 Resupply Market 的 price oracle 实现存在问题。对于新创建的低流动性 Market,攻击者可以通过 donation attack 操纵 exchange rate,从而绕过健康度检查,进而借出大量 reUSD 获利。

Resupply Market 如何计算 exchange rate?

BlockSec | Resupply 协议攻击事件的深度分析和思考

根据以上代码,可以得到 exchange rate 的计算公式如下:

BlockSec | Resupply 协议攻击事件的深度分析和思考

显然,如果 getPrices 返回的 price大于 1e36,整数除法的向下舍入会导致 _exchangeRate = 0。

如何操纵 price?

BlockSec | Resupply 协议攻击事件的深度分析和思考
BlockSec | Resupply 协议攻击事件的深度分析和思考

根据以上代码,可以得到 price 的计算方式如下:

BlockSec | Resupply 协议攻击事件的深度分析和思考

其中:

BlockSec | Resupply 协议攻击事件的深度分析和思考

由于代码中设置了 precision = 1,DEAD_SHARES = 1000,shares = 1e18,因此:

BlockSec | Resupply 协议攻击事件的深度分析和思考

最终,代入变量后得到 price 的计算公式如下:

BlockSec | Resupply 协议攻击事件的深度分析和思考

可见,想要放大 price 的值,关键在于如何扩大 total_assets 和 totalSupply 之间的差距,使得 total_assets 极大而 totalSupply 极小。在 Resupply 实际的协议实现中,公式中的 total_assets 取决于 underlying(crvUSD),totalSupply 取决于该 Market 里总体流动性所对应的share(cvcrvUSD),这正是经典的 donation attack 场景。

2.2 攻击交易分析

根据攻击交易[4],可以分析出攻击者做了如下几步核心操作:

1. 通过闪电贷借了4,000 USDC 并兑换为 3,999 crvUSD。

2. 向 Controller 0x8970 donate 了 2,000 crvUSD。

  • 在 donate 之前,Controller 0x8970 持有 crvUSD 数量为0。

  • Donate 之后,记录的 crvUSD 数量变为 2000000000000000000000(decimal 为 18)。

3. 存入~2 crvUSD 进入 Vault 0x0114 并获得了 1 share(cvcrvUSD)。

  • 此时记录的 crvUSD 数量为 2002000000000000000001(decimal为18)。

4. 为 Market 0x6e90 添加 1 单位 (即 Vault 0x0114 的 1 share) 抵押物。

5. 从 Market 0x6e90 借出 10,000,000 reUSD。

  • 可以看到此时 _exchangeRate 的值为 0,导致 _ltv 为 0,所以能够通过 _isSolvent 检查。 

BlockSec | Resupply 协议攻击事件的深度分析和思考

为什么此时的 _exchangeRate 为 0 呢?因为攻击者通过之前的步骤,操纵合约达到了如下状态:

BlockSec | Resupply 协议攻击事件的深度分析和思考

回顾一下 exchange rate 的计算方式:

BlockSec | Resupply 协议攻击事件的深度分析和思考

由于此时 price > 1e36,导致_exchangeRate = 0。

6. 将借出的 reUSD 兑换获利。

 3 经验教训

Resupply 此次被攻击的 Market 中 price oracle 实现类似 Curve 提供的模版合约[11]:

BlockSec | Resupply 协议攻击事件的深度分析和思考

但 Curve 给出了该实现的适用范围:

BlockSec | Resupply 协议攻击事件的深度分析和思考

遗憾的是,Resupply 协议在实现时似乎并未考虑这一适用性警告。

 4 关联关系和社区争议

4.1 Curve 生态五大项目的复杂关系网

要理解 Resupply 事件的深层影响,我们首先来看看Curve生态系统中五个核心协议之间的复杂关系:

BlockSec | Resupply 协议攻击事件的深度分析和思考

Curve Finance 是整个生态的核心,提供流动性池、crvUSD 和 LlamaLend 协议,支撑 Resupply、Prisma、Convex 和 Yearn 的运行。Convex 通过质押和治理优化 Curve 的收益,并为 Prisma 和 Resupply 提供额外的奖励机制。Prisma 依赖 Curve 的 LP 代币和 Convex 的收益增强功能,而 Resupply 则直接基于 Curve 的 LlamaLend 发行 reUSD,并由 Convex 和 Yearn 联合开发。Yearn 不仅优化 Curve 池的收益,还通过与 Convex 的合作推动 Resupply 的开发。

  • Curve Finance:作为核心平台,Curve 的流动性池(如 crvUSD 池)和 LlamaLend 协议被 Resupply 直接用于发行 reUSD,Prisma 用于质押 LP 代币,Yearn 用于收益优化,Convex 用于投票治理。

  • Convex Finance:Convex 是 Curve 的收益增强协议,用户通过质押 Curve LP 代币可获得更高的 CRV 奖励及 Convex 的 CVX 代币。Convex 控制 Curve 近 50% 的治理权重,并为 Prisma 和 Resupply 提供收益提升机制。

  • Prisma Finance:Prisma 利用 Curve 的 LP 代币进行质押,用户通过 Convex 获得增强的奖励(cvxPRISMA)。Prisma 依赖 Curve 的流动性和 Convex 的收益机制。

  • Yearn Finance:Yearn 是一个收益聚合器,通过优化 Curve 池的 LP 代币收益(如通过 Convex 增强)为用户提供高回报。Yearn 与 Convex 合作开发 Resupply,并在其收益策略中广泛使用 Curve 池。

  • Resupply:由 Convex 和 Yearn 联合开发,允许用户通过借出 crvUSD 等稳定币来获得 reUSD,并自动将代币质押在 Convex 上赚取 CRV 和 CVX 奖励,形成收益优化闭环。

4.2 争议和影响

然而,当 Resupply 遭受攻击后,这种复杂的关联关系立即成为了争议的焦点。Curve 创始人 Michael Egorov 迅速与 Resupply 划清界限,他强调:"There is no single person from Curve working on that project... don't generalize to Curve please."(没有任何 Curve 的人员参与该项目...请不要将问题泛化到 Curve)这种撇清关系的表态,讽刺地反映了 DeFi 生态中错综复杂的协作关系在面临危机时的脆弱性。

BlockSec | Resupply 协议攻击事件的深度分析和思考

上述相互关联的项目共同构成了一个高度耦合的生态系统---在这样的系统中,任何环节出现问题都可能引发连锁反应。因此,Resupply 攻击事件引发社区对协议关联性与安全性的广泛讨论[5],也就不足为奇了。

 5 更多思考

5.1 时间线

2025 年 5月 17 日,Resupply 官方地址 0x1f84 通过 Curve 的 OneWay Lending Factory 部署了一个新的 LlamaLend Market[6],其中:

  • 该 Market 将 crvUSD 作为借贷资产,并以 wstUSR 作为抵押代币。

  • ERC-4626 Vault 合约为 0x0114,对应的 Controller 为 0x8970。

2025 年 5 月 31 日,一个新的提案 wstUSR-long LlamaLend Market[7] 在 Resupply 的治理页面上线,该提案旨在允许用户通过该 LlamaLend Market 铸造 reUSD。

2025 年 6 月 11 日,该提案在链上发布[8]。

2025 年 6 月 26 日 00:18:47 (UTC),该提案获得通过,Resupply 官方地址 0x0417 在链上部署了[9] 一个新的 ResupplyPair(即 Resupply crvUSD/wstUSR Market) 0x6e90,该 Market:

  • 绑定了 Vault 0x0114 和 Controller 0x8970。

  • 以 Vault 的抵押债务头寸(即 cvcrvUSD,其标的资产为 crvUSD)作为抵押品。

2025 年 6 月 26 日 01:53:59 (UTC),即在 Market 0x6e90 部署上链约 1.5 小时之后,攻击者成功实施攻击[4];与此同时 BlockSec 检测到攻击并尝试联系项目方。

2025 年 6 月 26 日 02:26 (UTC),项目方未果并确认无法造成更多损失后,BlockSec 发布公开预警[2]。

2025 年 6 月 26 日 02:53:23 (UTC),项目方暂停协议[4]。

BlockSec | Resupply 协议攻击事件的深度分析和思考

5.2 🛡️如果有了 Phalcon,悲剧本可避免

ResupplyFi 的灾难电影在深夜上演,而全网首个警钟由 BlockSec Phalcon 敲响[2]

BlockSec | Resupply 协议攻击事件的深度分析和思考

这不是事后的马后炮,而是攻击发生的那一刻就响起的警钟。

BlockSec Phalcon Security 代表了 DeFi 安全防护的最新突破。通过在内存池阶段监控交易,Phalcon 能够在攻击交易进入内存池的瞬间就识别异常模式。系统基于AI驱动的智能分析引擎,整合了 200 多个典型攻击特征,在过去半年中保持了小于 0.0001% 的超低误报率,实现了真正意义上的精准威胁检测。

当威胁被识别后,Phalcon 的自动化攻击阻断机制会立即启动。系统利用独家开发的 Gas 竞价策略,确保防护交易能够抢跑攻击交易,同时自动触发协议的紧急暂停功能。整个响应过程支持 EOA、多签钱包等多种权限控制模式,为不同类型的协议提供灵活的安全解决方案。

如果 Resupply 在 Market 部署时就集成了 Phalcon 系统,攻击本可完全避免:

在 Market 0x6e90 部署完成后的 1.5 小时内,Phalcon 系统会自动检测到新 Market 的部署,智能分析其配置参数,识别出潜在的 donation attack 风险。系统会立即向项目方发送风险预警,建议增加初始流动性保护或调整相关参数。更关键的是,当攻击交易在 01:53:59 UTC 进入内存池时,Phalcon 的 AI 算法会立即识别出典型的 donation attack 模式,自动触发紧急暂停交易,通过 Gas 竞价确保防护交易优先执行,从而完全避免 1000 万美元的损失。

即使在攻击发生后,部署 Phalcon 仍能为 Resupply 和整个 Curve 生态带来巨大价值:

透明的实时监控系统向用户和社区展示了项目方对安全的坚定承诺,24 小时不间断的防护机制确保类似事件不再发生。公开的安全监控数据增强了项目透明度,同时也是重建社区信心的重要手段。对于受损项目而言,主动采用顶级安全方案证明了其对用户资金安全的负责态度,与 BlockSec 这样的行业领军企业合作,也为项目在安全领域的声誉提供了有力背书。

目前已有超过 500 亿美元的资产选择信任 Phalcon 的保护。我们已经成功阻止了 20 多起真实世界的黑客攻击,挽救了超过 2000 万美元的资产损失。在过去半年中,系统保持了完美的检测精度记录,实现了毫秒级的响应速度,始终比攻击者快一步。Phalcon 目前支持包括以太坊、BSC、Arbitrum 等在内超过 20 个主流区块链网络,为 DeFi 生态提供了全链覆盖的安全保障。

Resupply 千万美元在内等无数攻击事件告诉我们,在 DeFi 的世界里,安全不是可选项,而是生存的必需品。不要等到下一次攻击才后悔,现在就为您的协议部署最强安全防护。BlockSec 专家团队为您的协议进行全面的安全评估。

欢迎访问官网了解更多信息,或点击文章左下角「阅读原文」直接预约产品演示,深入体验产品功能。

🔗 Phalcon Security APP:

https://blocksec.com/phalcon/security

🔗 预约产品演示: 

https://blocksec.com/book-demo

References:

[1] https://resupply.fi/

[2] https://x.com/Phalcon_xyz/status/1938061381288530243

[3] https://x.com/Phalcon_xyz/status/1938073001087652021

[4] Resupply's Official Post Mortem: https://mirror.xyz/0x521CB9b35514E9c8a8a929C890bf1489F63B2C84/ygJ1kh6satW9l_NDBM47V87CfaQbn2q0tWy_rtp76OI

[5] https://rekt.news/resupplyfi-rekt

[6] 攻击交易:https://app.blocksec.com/explorer/tx/eth/0xffbbd492e0605a8bb6d490c3cd879e87ff60862b0684160d08fd5711e7a872d3

[7] 部署新 LlamaLend Market 交易:https://app.blocksec.com/explorer/tx/eth/0x221bb0b9118cf8c9528078eb5db919c32af42a7faf9a57b08614861f09f75f43

[8] 创建新 Resupply crvUSD/wstUSR Market 提案: https://gov.resupply.fi/t/onboard-wstusr-long-llamalend-market/41

[9] 提案上链交易:https://app.blocksec.com/explorer/tx/eth/0x18e91078047dc57037c3e84658a04f7133caa709ad66ab87748d3fe9833dca6e

[10] 部署 Resupply crvUSD/wstUSR Market 交易:https://app.blocksec.com/explorer/tx/eth/0x852eca15a9fd352817346915f7bc8817d46de349bd7a8fc6ee73c7b66ec9ab41

[11] https://docs.curve.finance/lending/contracts/cryptofrompoolvault/

关于BlockSec

BlockSec是全球领先的区块链安全公司,于2021年由多位业内知名专家联合创立。BlockSec致力于提升Web3世界的安全性和易用性,并提供一站式安全服务,包括安全审计服务、安全与合规管理平台BlockSec Phalcon、资金追踪调查平台MetaSleuth等。

目前,BlockSec已服务全球逾500家客户,既涵盖Web3知名公司Coinbase、Cobo、Uniswap、Compound、MetaMask、Bybit、Mantle、Puffer、FBTC、Manta、Merlin、PancakeSwap等,也包括了权威监管机构及咨询机构,如联合国、FBI、SFC、PwC、FTI Consulting等。

官网:https://blocksec.com

Twitter:https://twitter.com/BlockSecTeam

原文始发于微信公众号(BlockSec):BlockSec | Resupply 协议攻击事件的深度分析和思考

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月4日10:25:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   BlockSec | Resupply 协议攻击事件的深度分析和思考https://cn-sec.com/archives/4218872.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息