Adversarial ERC-4626: How Vault-Share Manipulation Still Bypasses Listing Screens in 2025
三句話摘要
ERC-4626 Vault 的 Share 價格操縱漏洞:2024 年兩起真實駭客事件解析與防禦策略。 ERC-4626 本身設計沒有問題,但整合協議若不對匯率增長速度與最低供應量設防護欄,任何空 Vault 或低流動性 Vault 都是可利用的攻擊面。 匯率可被外部捐贈操縱:ERC-4626 的 `convertToAssets()` 依賴 `totalAssets / totalShares`,任何人可直接 ERC-20 轉帳增加 totalAssets,而不增加 shares,導致匯率虛高;在 share 供應量極低時,此影響被成倍放大。
重點整理
重點- 1
匯率可被外部捐贈操縱:ERC-4626 的 `convertToAssets()` 依賴 `totalAssets / totalShares`,任何人可直接 ERC-20 轉帳增加 totalAssets,而不增加 shares,導致匯率虛高;在 share 供應量極低時,此影響被成倍放大。
- 2
Venus 駭客利用借貸協議的 oracle 整合缺陷:攻擊者刻意壓低 wUSDM 的流通量,再注入 USDM 把匯率從 1.07 拉至 1.7,使借貸協議的抵押品估值失真,同時在 AMM 套利,這說明「已有 Chainlink oracle」並不等同於「oracle 不可操縱」。
- 3
Resupply 駭客利用空 Vault 的精度溢位:空 Vault 加上天文數字匯率(2e18),使協議在計算 LTV 時因整數除法下溢返回 0,攻擊者憑此繞過健康因子檢查,無限制鑄造至最高供應上限。
- 4
防禦分兩層:Vault 設計端與整合端:Vault 端需解決捐贈注入問題(虛擬存款、內部追蹤、初始流動性);整合端需設供應上限、匯率增長速度上限、上市審查清單,不能單靠已審計標籤放行。
實用技巧與重點
乾貨- 漏洞存在年限:ERC-4626 提案於 2021 年,該漏洞已知約 4 年
- Venus 駭客:wUSDM Vault(USDM 為底層資產);匯率從 1.07 → 1.7;平台:zkSync Era;Venus 為 Compound V2 的 fork
- Resupply 駭客:空 Vault;攻擊者捐贈 2,000 e18 資產後鑄造 1 wei share;匯率被拉至 2e18;`2e18 × 2e18 = 2e36`,導致 LTV 計算歸零;債務上限雖存在但設為 1000 萬 USD,過高
- Vault 端防禦措施:
- Initial deposit(部署時注入初始流動性)
- Virtual deposit(計算匯率時人為加 1e6 至 totalAssets)
- Internal asset balance tracking(不用 `balanceOf`,改用內部帳本)
- Share price averaging(匯率上漲分數小時平滑分散)
- Explicit exchange rate tracking(直接追蹤匯率值而非資產餘額)
- Discard stealth donations(追蹤因捨入產生的隱性捐贈)
- 整合端防禦措施:
- Supply cap + debt cap(尤其對空 Vault 要設極低上限)
- 要求上市時有最低初始 TVL
- Correlated asset price oracle(設定年化預期漲幅,超過則 cap 匯率)
- Circuit breaker(匯率單次波動過大即暫停市場)
- Total supply threshold check(share 總量低於門檻即 revert)
- 上市審查清單(Euler 的部落格:Exchange Rate Manipulations in ERC-4626)
- Compound 上市清單:明確每次上市均人工測試 share 價格是否可被捐贈或閃電貸操縱,不依賴既有審計報告
結論
結論“ERC-4626 本身設計沒有問題,但整合協議若不對匯率增長速度與最低供應量設防護欄,任何空 Vault 或低流動性 Vault 都是可利用的攻擊面。”
完整解析
詳細ERC-4626 是 DeFi 中廣泛採用的收益型 Vault 標準,允許用戶存入底層資產換取 share token,並可隨時按匯率贖回。此匯率的核心計算邏輯為 `totalAssets / totalShares`,而問題在於 `totalAssets` 可透過直接 ERC-20 轉帳(捐贈)增加,無需通過 `deposit()`/`mint()` 函數,造成匯率被人為抬高,且在 share 供應量極低時效果最顯著。這個問題業界已知長達 4 年,但 2024 年仍發生了兩起真實損失。
第一起是 Venus 協議在 zkSync Era 上遭到攻擊。攻擊者使用閃電貸,在兩個帳戶分別開設借入 wUSDM 與存入 wUSDM 的倉位,接著大量贖回 wUSDM 壓低 Vault 的 share 供應量,再將取得的 USDM 捐回 Vault,把 `convertToAssets()` 返回的匯率從 1.07 硬推至 1.7。Venus 直接使用此函數結合 Chainlink 的 USDM/USD 報價作為估值來源,毫無異常值過濾,致使抵押品價值虛高,攻擊者得以清算對手倉位並借出額外資產,同時在 AMM 上以高匯率套現,完成閉環獲利。
第二起是 Resupply 協議遭攻擊,性質更具破壞性。Resupply 是一個接受 ERC-4626 Vault token 作為抵押品的 CDP 協議,而列入支持的某個 crvUSD Vault 當時完全是空的。攻擊者捐贈 2,000 e18 的底層資產,再鑄造僅 1 wei 的 share,使 Vault 匯率達到 2e18。Resupply 計算價格時以 1e18(18 位小數)作為輸入呼叫 `convertToAssets()`,得到 2e36 的結果。此天文數字在後續 LTV 計算的整數除法中造成下溢,返回值為零,即「健康因子無窮大」。攻擊者憑此繞過所有清算邏輯,用極少量抵押品鑄造達到協議設定的最高債務上限——整整 1000 萬 USD。
演講者進一步梳理了兩類防禦思路。在 Vault 設計端,根本對策是讓捐贈難以生效或影響有限:初始流動性注入可確保 share 供應量永遠不會歸零;虛擬存款在計算公式中加入固定偏移量(如 1e6);內部帳本追蹤則完全繞過 `balanceOf()` 避免捐贈影響;share 價格平滑機制則令瞬間拉高的匯率分散於數小時內才生效。在整合協議端,關鍵是不盲目信任 `convertToAssets()` 的即時輸出:應配合相關資產報價 oracle 設定匯率年化增長上限(超過則強制使用上限值);上市審查需強制要求最低初始 TVL;應設置總 share 供應量下限閾值,低於門檻即拒絕執行;此外,維護一份結構化的上市審查清單,針對每個新資產手動測試 share 價格是否可被操縱,優先於依賴第三方審計結論。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

