2025年5月28日,以太坊上的Cork Protocol [1] 遭到漏洞攻击,导致约1200万美元的损失。根本原因在于到期时间的历史隐含收益率平均值(HIYA)价格操纵与Uniswap v4钩子回调中缺失的访问控制相结合。由于HIYA风险溢价随着剩余到期时间的趋近于零呈指数级增长,临近到期时的掉期操作膨胀了HIYA,导致新初始化的市场严重低估了Cover Tokens。同时,CorkHook.beforeSwap 缺乏 msg.sender 认证,允许使用精心构造的参数进行任意调用。攻击者利用这两个缺陷,提取了大量的CT和DS,并将其兑换回wstETH,耗尽了协议储备。
背景
0x1.1 代币经济学
Cork Protocol [2] 引入了一种新的代币化风险原语,作为链上资产(如金库代币、收益型稳定币和流动性(再)质押代币)的可编程风险层。基础组件是Cork Pool,它是构建市场的机制。每个Cork Pool都围绕一对资产构建:赎回资产(RA)和锚定资产(PA)。
Cork Pool接收锁定的赎回资产存款。作为回报,会铸造两种代币并返回给存款人:脱钩掉期(DS)和覆盖代币(CT)。在设定的到期日期之前,1 DS + 1 CT/PA 可以兑换回1 RA;到期后,1 CT 可以按比例兑换回池中剩余的RA + PA。
0x1.2 合约实现
DS和CT都可以交易。用户可以使用基于自定义AMM曲线的NormalSwap通过CorkHook交易CT和RA,而DS和RA通过Router和CorkHook使用FlashSwap进行交易。
NormalSwap [自定义AMM曲线]:
FlashSwap [FlashSwapRouter.swapDsforRa]:
-
买方将RA转入
Router。 -
在第一次
beforeSwap调用时,Router计算要兑换出的DS数量。如果需要,它会从Uniswap v4池中借入RA和CT,将借入的CT和协议的DS转换为RA,保留所需的RA,并将借入的RA退还给Uniswap池。 -
在第二次
beforeSwap调用时,Router通过depositPsm将RA分解为CT和DS,将所有DS转给用户,将借入的CT偿还给Uniswap池,并将任何多余的CT退还给买方。
发行后资金分配:
0x1.3 新发行定价机制
该协议采用HIYA(历史隐含收益率平均值),其计算方法是交易量 () × 风险溢价 () 的累积和,用于衡量风险溢价并根据到期时间调整初始价格。如果HIYA较高,协议会假设更高的脱钩风险,导致CT的初始定价较低。
风险溢价 () 的计算包含两个组成部分:高CT价格与低值相关(这是直观的),而到期时间 T 具有指数级放大效应。临近到期时,T趋近于零,导致指数 快速增长。这会将即使是微小的CT价格变化放大为巨大的风险溢价值。
-
为 1
-
为 CT 的价格
-
为已归一化在1-0之间的到期时间
漏洞分析
受影响的市场涉及以下代币:
| 角色 | 代币 | 描述 |
|---|---|---|
| RA | wstETH |
赎回资产 |
| PA | weETH |
锚定资产 |
| DS | weETH8DS-2 |
脱钩掉期 |
| CT | weETH8CT-2 |
覆盖代币 |
为清晰起见,报告其余部分将使用抽象角色(RA、DS、CT)而非具体代币名称来指代代币,除非有必要区分。
攻击者通过两种不同的方式从AMM和Router中提取了DS和CT。由于DS + CT可以兑换为RA,同时获得两者即可直接获利。攻击由两个组成部分构成。
0x2.1 覆盖代币提取:HIYA操纵导致市场初始价格被人为压低
到期后的市场重新初始化价格由前一期的accumulatedHIYA值派生。由于HIYA在掉期过程中会被更新并包含风险溢价,攻击者可以在到期前不久执行掉期操作,人为地膨胀accumulatedHIYA。
结果是,新市场以扭曲的价格比率进行初始化,导致Cover Tokens在AMM中的价格极低,这使得攻击者能够以RA换取数量巨大的CT。
0x2.2 脱钩掉期提取:`CorkHook.beforeSwap`中缺失的访问控制
该漏洞源于CorkHook.beforeSwap中缺失的发送者验证。由于该函数没有强制执行 msg.sender == PoolManager,攻击者可以携带任意参数直接调用它。
通过伪装成RA的DS代币,并使用精心构造的calldata模拟Router.CorkCall,攻击者可以触发未经授权的拆分并从恶意初始化的市场中提取价值。
攻击分析
本次事件分三个阶段进行:准备交易、初始化交易和攻击交易。
准备交易
在此交易中,攻击者调用了SwapRaForDs(),操纵了accumulatedHIYA。

初始化交易
在此交易中,市场以操纵后的价格比率进行了初始化,导致AMM中CT的价格非常低。随后,攻击者用RA兑换了大量CT。
攻击交易
攻击交易的关键步骤总结如下。
在此阶段,攻击者创建了一个将真实DS(weETH8DS‑2)视为其RA的虚假市场。在此虚假市场中铸造的所有代币均在下方称为虚假CT和虚假DS。
-
攻击者首先在合法市场中用RA兑换DS。
-
攻击者部署并初始化了一个虚假市场,将真实DS指定为虚假RA。
-
攻击者直接调用
beforeSwap(绕过了缺失的访问控制),并带有一个非空的hookData,触发了FlashSwap的执行路径。
-
在
hookData中,攻击者将paymentToken指定为虚假CT,导致协议对虚假市场执行RA拆解逻辑。 -
协议将所有虚假RA(即真实DS)拆解为虚假CT和虚假DS。全部虚假DS部分被转给攻击者,虚假CT部分(减去最小的
paymentAmount)被退还给攻击者。 -
攻击者在虚假市场中将提取的虚假CT和虚假DS兑换回虚假RA,从而回收了真实DS。
-
最后,攻击者将回收的DS与之前购买的CT组合成RA,从而实现了攻击利润。
总结
此次事件结合了两个独立的缺陷,单独一个缺陷不足以构成漏洞,但组合起来形成了一个能够耗尽协议1200万美元的利用链。
- 临近到期时的指数级风险溢价。 HIYA定价公式在剩余到期时间趋近于零时放大风险溢价,使得临近到期时的掉期操作成为市场重新初始化价格的操纵向量。
- 钩子回调中缺失的发送者验证。
CorkHook.beforeSwap未强制要求msg.sender为PoolManager,允许使用任意参数直接调用,从而使攻击者能够模拟FlashSwap执行路径。 - 跨模块交互的盲点。 经济设计(基于HIYA的定价)和访问控制漏洞(未经身份验证的钩子回调)存在于不同的模块。它们的交互产生了一个可利用的路径,单一模块分析不太可能检测到。
参考
关于BlockSec
BlockSec是一家全栈式区块链安全和加密合规提供商。我们构建的产品和服务帮助客户在协议和平台的整个生命周期中执行代码审计(包括智能合约、区块链和钱包)、实时拦截攻击、分析事件、追踪非法资金,并满足AML/CFT合规要求。
BlockSec已在顶级会议上发表了多篇区块链安全论文,报告了多个DeFi应用的零日攻击,阻止了多次黑客攻击,挽回了超过2000万美元的损失,并保护了数十亿美元的加密货币。



