Back to Blog

#6 軟木塞協議事件:兩個獨立漏洞組合成毀滅性的攻擊鏈

Code Auditing
February 11, 2026
8 min read

2025 年 5 月 28 日,以太坊上的 Cork Protocol 遭到駭客攻擊 [1],導致約 1,200 萬美元的損失。此事件的根本原因在於到期時間前的歷史隱含收益率平均值 (HIYA) 價格操縱,以及 Uniswap v4 Hook 回調函式中缺少存取控制。由於 HIYA 風險溢價會隨著到期時間趨近於零而呈指數級增加,後期交易推高了 HIYA,導致新初始化的市場嚴重低估了 Cover Token (CT) 的價格。同時,CorkHook.beforeSwap 缺乏 msg.sender 驗證,允許攻擊者以精心構造的參數進行任意呼叫。透過同時利用這兩個漏洞,攻擊者提取了約 3,760e18 的 CT 和 DS,並將其兌換為 wstETH,耗盡了協議儲備金。

0x1 背景

0x1.1 代幣經濟學

Cork Protocol [2] 引入了一種用於代幣化風險的新原語,作為鏈上資產(如金庫代幣、生息穩定幣和流動性再質押代幣)的可程式化風險層。其核心組件是 Cork Pool,市場圍繞著該機制構建。每個 Cork Pool 均圍繞一對資產構建:贖回資產 (Redemption Asset, RA) 和 掛鉤資產 (Pegged Asset, PA)。

Cork Pool 接收鎖定的贖回資產。作為回報,系統會鑄造兩種代幣並返還給存款人:Depeg Swap (DS) 和 Cover Token (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 均可交易。使用者可以透過 CorkHook 使用基於自定義 AMM 曲線的 NormalSwap 來交易 CT 和 RA,而 DS 和 RA 則透過 RouterCorkHook 使用 FlashSwap 進行交易。

NormalSwap [自定義 AMM 曲線]:

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

FlashSwap [FlashSwapRouter.swapDsforRa]:此機制是攻擊的核心。攻擊者後來透過對 beforeSwap 的直接、未經授權的呼叫(第 0x2.2 節)觸發了此路徑。

  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 定價較低。

Cumulative HIYA=TrTvTCumulative\ HIYA = \sum_T r_T v_T

風險溢價 (rTr_T) 的計算包含兩個部分:高 CT 價格與低 rTr_T 值相關(這符合直覺),而到期時間 TT 具有指數級放大效應。臨近到期時,TT 趨近於零,導致指數 1/T1/T 迅速增長。這會將即使是很小的 CT 價格變化放大為巨大的風險溢價數值。

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

  • FF 為 1

  • PTP_T 為 CT 的價格

  • TT 為歸一化在 1 到 0 之間的到期時間

舉例說明其放大效應:如果 CT 的交易價格為 pT=0.95p_T = 0.95(5% 的折價),則在 T=0.5T = 0.5(距離到期還有一半時間)時的風險溢價為:

r0.5=(1/0.95)1/0.51=(1.053)210.108r_{0.5} = (1/0.95)^{1/0.5} - 1 = (1.053)^{2} - 1 \approx 0.108

T=0.01T = 0.01(接近到期時),相同的 CT 價格會產生:

r0.01=(1/0.95)1/0.011=(1.053)1001167r_{0.01} = (1/0.95)^{1/0.01} - 1 = (1.053)^{100} - 1 \approx 167

相同的 5% CT 折價在接近到期時會產生約 1,500 倍的風險溢價。這種指數級的敏感性即為操縱向量:在到期前不久執行的交換會不成比例地推高 HIYA,從而扭曲下一個市場的初始化價格。

0x2 漏洞分析

受影響的市場涉及以下代幣:

角色 代幣 描述
RA wstETH 贖回資產
PA weETH 掛鉤資產
DS weETH8DS-2 Depeg Swap (DS)
CT weETH8CT-2 Cover Token (CT)

為清楚起見,本報告其餘部分將代幣按其抽象角色(RA、DS、CT)稱呼,而非具體名稱(特殊情況除外)。

攻擊者使用兩種不同的方法從 AMM 和 Router 中提取了 DS 和 CT。由於 DS + CT 可以贖回為 RA,獲得兩者即可實現直接利潤提取。攻擊由兩個部分組成。

0x2.1 Cover Token 提取:HIYA 操縱導致人為壓低的市場初始化價格

當某個市場週期到期時,協議會使用前一個週期的 accumulatedHIYA 來設定 AMM 中的 CT/RA 價格比率。較高的 HIYA 代表感知到的脫鉤風險較高,這會轉化為較低的初始 CT 價格。

由於 HIYA 在每次交換時都會更新並包含風險溢價(第 0x1.3 節),且風險溢價隨著 T0T \to 0 而呈指數級增長,因此在到期前不久執行的交易會將 accumulatedHIYA 推高數個數量級。攻擊者透過在到期前呼叫 SwapRaForDs() 利用了這一點,產生了巨大的風險溢價並累積到 HIYA 中。

當新的市場週期隨即初始化時,協議讀取了被推高的 HIYA,並將其解釋為極端的脫鉤風險,將 CT 的初始 AMM 價格設定得遠低於其公平價值。攻擊者隨後以這種被扭曲的價格用 RA 交換 CT,從而廉價獲取了大量的 CT 部位。

0x2.2 Depeg Swap 提取:CorkHook.beforeSwap 缺少存取控制

在標準的 Uniswap v4 Hook 設計中,beforeSwap 僅由 PoolManager 在交換期間呼叫。Cork 的實作並未強制執行此限制:

// 缺失:require(msg.sender == address(poolManager));
function beforeSwap(
    address sender,
    PoolKey calldata key,
    IPoolManager.SwapParams calldata params,
    bytes calldata hookData
) external override returns (bytes4, BeforeSwapDelta, uint24) {
    ...
}

若沒有此檢查,任何外部合約都可以直接呼叫 beforeSwap 並傳入任意 hookData。當 hookData 不為空時,該函式會進入 FlashSwap 執行路徑(第 0x1.2 節),該路徑透過 depositPsm 將 RA 分解為 CT 和 DS。攻擊者透過使用包含假市場代幣資訊的精心構造的 hookData 直接調用 beforeSwap 來利用此漏洞,導致協議分解代幣並將結果轉移給攻擊者。

0x2.3 兩個漏洞如何組合

單一漏洞本身都不足以提取出 1,200 萬美元。

HIYA 操縱使攻擊者獲得了廉價的 CT,但僅憑 CT 無法贖回 RA。贖回公式要求兩種代幣同時存在:CT + DS = RA。攻擊者仍需要一種獲取 DS 的途徑。

beforeSwap 中缺失的存取控制提供了該路徑。透過直接使用精心構造的 hookData 呼叫 beforeSwap,攻擊者可以觸發帶有任意參數的 FlashSwap 分解路徑。為了透過此路徑獲取真正的 DS,攻擊者部署了一個假市場,將真正的 DS 指定為其 RA,然後呼叫 beforeSwap 將該「RA」(真正的 DS)分解為假 CT 和假 DS,並透過假市場將其換回真正的 DS。

當同時持有 CT(來自 HIYA 操縱)和 DS(透過假市場進行未經授權的 beforeSwap 呼叫獲取)時,攻擊者將它們以 1:1 的比例兌換為 RA (wstETH)。

0x3 攻擊分析

攻擊分三次交易展開,分別對應三個階段:推高 HIYA、獲取廉價 CT,以及提取 DS 以完成贖回配對。

0x3.1 準備階段:推高 HIYA

這筆交易中,攻擊者在市場到期前不久呼叫了 SwapRaForDs()。由於 TT 接近零,該交換產生了不成比例的巨大風險溢價(第 0x1.3 節),進而推高了 accumulatedHIYA

該階段後攻擊者持有: 來自交換的 DS(用於後續階段 0x3.3),以及儲存在鏈上的被推高的 accumulatedHIYA

0x3.2 初始化階段:獲取廉價 CT

這筆交易中,新市場週期被初始化。協議讀取了被推高的 accumulatedHIYA 並在 AMM 中設定了扭曲的 CT/RA 價格比率,使 CT 的定價遠低於公平價值。攻擊者隨後以該貶值價格用約 0.000003e18 RA 交換了 3,760e18 CT。

該階段後攻擊者持有: 大量的 CT 部位(透過被操縱的初始化價格廉價取得)。

0x3.3 提取階段:透過假市場獲取 DS

此階段利用存取控制漏洞(第 0x2.2 節)來提取 DS,從而湊齊贖回 RA 所需的 CT + DS 配對。核心技術是一個將真實 DS 視為其贖回資產的假市場:

假市場角色 實際代幣 目的
假 RA 真實 DS (weETH8DS-2) 允許真實 DS 進入分解路徑
假 CT 從假 RA 分解中鑄造 中間產物;用於換回真實 DS
假 DS 從假 RA 分解中鑄造 中間產物;用於換回真實 DS

攻擊交易的關鍵步驟:

  1. 攻擊者首先在合法市場中用 RA 交換 DS。

    攻擊者持有: 真實 DS。

  2. 攻擊者部署並初始化了假市場,將真實 DS 指定為假 RA。

  3. 攻擊者直接呼叫 beforeSwap(利用缺失的存取控制),並傳入非空的 hookData,觸發對假市場的 FlashSwap 執行路徑。在 hookData 中,攻擊者指定 paymentToken 為假 CT,導致協議對假市場執行 RA 分解邏輯。

  4. 協議將所有假 RA(即真實 DS)分解為假 CT 和假 DS。將全部假 DS 部分轉移給攻擊者,並退還假 CT 部分(扣除極少量的 paymentAmount)。

    攻擊者持有: 3,761e18 假 CT + 3,761e18 假 DS(均源自真實 DS)。

  5. 攻擊者在假市場內將假 CT 和假 DS 交換回假 RA,從而恢復出真實 DS。

    攻擊者持有: 3,761e18 真實 DS(已恢復)。

  6. 攻擊者將恢復的 DS 與第 0x3.2 節中獲得的 CT 組合,贖回 RA (wstETH),完成利潤提取。

    攻擊者持有: 3,760e18 RA (wstETH) 利潤(即 1,200 萬美元)。

總結

此次事件將兩個獨立的漏洞結合在一起,儘管單獨來看都不足以構成致命威脅,但組合後的攻擊鏈成功從協議中提取了 1,200 萬美元。

  • 到期前的指數級風險溢價。 HIYA 定價公式在到期時間趨近於零時會放大風險溢價,使得後期交易成為市場重新初始化價格的操縱向量。
  • Hook 回調中缺失對呼叫者的驗證。 CorkHook.beforeSwap 未強制要求 msg.senderPoolManager,從而允許攻擊者以任意參數進行直接呼叫,並透過偽造 FlashSwap 執行路徑來進行攻擊。
  • 跨模組互動帶來的盲點。 經濟設計(基於 HIYA 的定價)和存取控制漏洞(未經授權的 Hook 回調)存在於不同的模組中。它們之間的互動創造了一個單一模組分析難以發現的攻擊路徑。

參考資料

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

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


關於 BlockSec

BlockSec 是一家全端區塊鏈安全與加密合規服務提供者。我們構建產品和服務,協助客戶進行代碼審計(包括智慧合約、區塊鏈和錢包)、即時攔截攻擊、分析事故、追蹤非法資金,並在協議與平台的整個生命週期內履行反洗錢 (AML) 及反恐融資 (CFT) 義務。

BlockSec 已在知名會議上發表多篇區塊鏈安全論文,通報了多個 DeFi 應用的零日漏洞,攔截了多次駭客攻擊並挽回超過 2,000 萬美元的資金,並保護了價值數十億美元的加密貨幣資產。

Sign up for the latest updates
~$598萬損失:Aztec、Raydium等|BlockSec週報
Security Insights

~$598萬損失:Aztec、Raydium等|BlockSec週報

本週區塊鏈安全報告涵蓋2026年6月8日至15日,分析以太坊和Solana上4起重大事件,總損失約598萬美元。重點事件包括:Aztec Connect因缺少輸入驗證導致rollup證明路徑與L1結算狀態不一致;Raydium因舊版AMM v3程式缺少驗證,攻擊者操縱LP代幣贖回計算並清空四個池。兩個漏洞均存在多年後才被利用。報告涵蓋輸入驗證缺失、整數溢出及治理攻擊等類型。

Zcash Orchard 健全性漏洞分析 | BlockSec 週報
Security Insights

Zcash Orchard 健全性漏洞分析 | BlockSec 週報

2026年6月1日當週,Zcash Orchard隱私池電路被公開披露存在嚴重健全性漏洞。該漏洞由halo2 ECC標量乘法組件缺少等式約束引起,可能導致透過雙重支付在Orchard池中無法被偵測地偽造ZEC。此漏洞自2022年5月Orchard啟用以來已存在逾四年,由研究員Taylor Hornby使用Anthropic Opus 4.8模型進行AI輔助安全審計時發現,並透過緊急網路升級(NU6.2)修補。本報告涵蓋技術根本原因、AI輔助發現過程、緊急應對時間軸及對ZKP生態系統的影響。

通訊 - 2026年5月
Security Insights

通訊 - 2026年5月

2026年5月,DeFi生態發生三起重大安全事件。Echo Protocol因管理員密鑰外洩遭惡意增發eBTC,損失約7,670萬美元;StablR因多簽治理漏洞被非法發行穩定幣,損失約1,280萬美元;Verus-Ethereum Bridge因類型驗證失敗導致攻擊,損失約1,170萬美元。

Best Security Auditor for Web3

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

BlockSec Audit