Back to Blog

#6 软木协议事件:两处独立缺陷合并成一个毁灭性漏洞链

Code Auditing
February 11, 2026

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。

PA+DS=RAPA + DS = RA

CT+DS=RACT + DS = RA

0x1.2 合约实现

DS和CT都可以交易。用户可以使用基于自定义AMM曲线的NormalSwap通过CorkHook交易CT和RA,而DS和RA通过RouterCorkHook使用FlashSwap进行交易。

NormalSwap [自定义AMM曲线]:

x1tyt=kx^{1-t} y^{t} = k

FlashSwap [FlashSwapRouter.swapDsforRa]:

  1. 买方将RA转入Router

  2. 在第一次beforeSwap调用时,Router计算要兑换出的DS数量。如果需要,它会从Uniswap v4池中借入RA和CT,将借入的CT和协议的DS转换为RA,保留所需的RA,并将借入的RA退还给Uniswap池。

  3. 在第二次beforeSwap调用时,Router通过depositPsm将RA分解为CT和DS,将所有DS转给用户,将借入的CT偿还给Uniswap池,并将任何多余的CT退还给买方。

发行后资金分配:

RA+CT:AMMRA+CT: AMM

DS:RouterDS: Router

0x1.3 新发行定价机制

该协议采用HIYA(历史隐含收益率平均值),其计算方法是交易量 (vTv_T) × 风险溢价 (rTr_T) 的累积和,用于衡量风险溢价并根据到期时间调整初始价格。如果HIYA较高,协议会假设更高的脱钩风险,导致CT的初始定价较低。

累积HIYA=TrTvT累积HIYA = \sum_T r_T v_T

风险溢价 (rTr_T) 的计算包含两个组成部分:高CT价格与低rTr_T值相关(这是直观的),而到期时间 T 具有指数级放大效应。临近到期时,T趋近于零,导致指数 1/T1/T 快速增长。这会将即使是微小的CT价格变化放大为巨大的风险溢价值。

rT=(F/pT)1/T1r_T = (F / p_T)^{1/T} - 1

  • FF 为 1

  • PTP_T 为 CT 的价格

  • TT 为已归一化在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。

  1. 攻击者首先在合法市场中用RA兑换DS。

  2. 攻击者部署并初始化了一个虚假市场,将真实DS指定为虚假RA。

  3. 攻击者直接调用 beforeSwap(绕过了缺失的访问控制),并带有一个非空的hookData,触发了FlashSwap的执行路径。

  4. hookData中,攻击者将paymentToken指定为虚假CT,导致协议对虚假市场执行RA拆解逻辑。

  5. 协议将所有虚假RA(即真实DS)拆解为虚假CT和虚假DS。全部虚假DS部分被转给攻击者,虚假CT部分(减去最小的paymentAmount)被退还给攻击者。

  6. 攻击者在虚假市场中将提取的虚假CT和虚假DS兑换回虚假RA,从而回收了真实DS。

  7. 最后,攻击者将回收的DS与之前购买的CT组合成RA,从而实现了攻击利润。

总结

此次事件结合了两个独立的缺陷,单独一个缺陷不足以构成漏洞,但组合起来形成了一个能够耗尽协议1200万美元的利用链。

  • 临近到期时的指数级风险溢价。 HIYA定价公式在剩余到期时间趋近于零时放大风险溢价,使得临近到期时的掉期操作成为市场重新初始化价格的操纵向量。
  • 钩子回调中缺失的发送者验证。 CorkHook.beforeSwap未强制要求msg.senderPoolManager,允许使用任意参数直接调用,从而使攻击者能够模拟FlashSwap执行路径。
  • 跨模块交互的盲点。 经济设计(基于HIYA的定价)和访问控制漏洞(未经身份验证的钩子回调)存在于不同的模块。它们的交互产生了一个可利用的路径,单一模块分析不太可能检测到。

参考

  1. https://www.cork.tech/blog/post-mortem

  2. https://docs.cork.tech/core-concepts/cork-pool


关于BlockSec

BlockSec是一家全栈式区块链安全和加密合规提供商。我们构建的产品和服务帮助客户在协议和平台的整个生命周期中执行代码审计(包括智能合约、区块链和钱包)、实时拦截攻击、分析事件、追踪非法资金,并满足AML/CFT合规要求。

BlockSec已在顶级会议上发表了多篇区块链安全论文,报告了多个DeFi应用的零日攻击,阻止了多次黑客攻击,挽回了超过2000万美元的损失,并保护了数十亿美元的加密货币。

Sign up for the latest updates
Tracing $1.6B in TRON USDT: Inside the VerilyHK Ponzi Infrastructure
Case Studies

Tracing $1.6B in TRON USDT: Inside the VerilyHK Ponzi Infrastructure

An on-chain investigation into VerilyHK, a fraudulent platform that moved $1.6B in TRON USDT through a multi-layered fund-routing infrastructure of rotating wallets, paired payout channels, and exchange exit funnels, with traced connections to the FinCEN-sanctioned Huione Group.

Weekly Web3 Security Incident Roundup | Mar 30 – Apr 5, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Mar 30 – Apr 5, 2026

This BlockSec weekly security report covers nine DeFi attack incidents detected between March 30 and April 5, 2026, across Solana, BNB Chain, Arbitrum, and Polygon, with total estimated losses of approximately $287M. The week was dominated by the $285.3M Drift Protocol exploit on Solana, where attackers combined multisig signer social engineering with Solana's durable nonce mechanism to bypass a zero-timelock 2-of-5 Security Council, alongside notable incidents including a $950K flash loan TWAP manipulation against the LML staking protocol, a $359K Silo Finance vault inflation via an external `wstUSR` market donation exploiting a depegged-asset oracle and `totalAssets()` accounting flaw, and an EIP-7702 delegated-code access control failure. The report provides detailed vulnerability analysis and attack transaction breakdowns for each incident, covering flawed business logic, access control, price manipulation, phishing, and misconfiguration attack types.

Drift Protocol Incident: Multisig Governance Compromise via Durable Nonce Exploitation
Security Insights

Drift Protocol Incident: Multisig Governance Compromise via Durable Nonce Exploitation

On April 1, 2026 (UTC), Drift Protocol on Solana suffered a $285.3M loss after an attacker exploited Solana's durable nonce mechanism to delay the execution of phished multisig approvals, ultimately transferring administrative control of the protocol's 2-of-5 Squads governance with zero timelock. With full admin privileges, the attacker created a malicious collateral market (CVT), inflated its oracle price, relaxed withdrawal protections, and drained USDC, JLP, SOL, cbBTC, and other assets through 31 rapid withdrawals in approximately 12 minutes. This incident highlights how durable nonce-based delayed execution can decouple signer intent from on-chain execution, bypassing the temporal assumptions that multisig security implicitly relies on.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit