僅供教育參考,不構成投資建議;投資可能產生損失。
直接答案
預言機攻擊利用協定的資料信任邊界,讓價格、匯率、指數、資產淨值或狀態輸入觸發經濟上不安全的操作。攻擊者可能操縱流動性薄弱的交易場所、攻破報告者或金鑰、利用聚合或更新規則,也可能藉由借入資金,利用使用端缺少的新鮮度、單位、範圍與備援檢查。即使預言機營運者沒有惡意,過時或設定錯誤的資料源也可能造成相同損失,因此事件分析必須區分攻擊路徑與故障模式。
關鍵比較不是顯示價格是否劇烈波動,而是影響合約實際採用數值的成本與風險,是否低於借貸、鑄造、贖回、結算或清算可提取的可執行價值。閃電流動性可以為原子路徑融資,但它不會製造有缺陷的信任邊界,也不是利用漏洞的必要條件。
預言機數值也不一定是可成交的市場價格。每次審查都必須將數值綁定至鏈、區塊、資料源或池地址、基礎與報價資產方向、小數位數、時間戳、聚合方式、市場規模及使用函式。有效簽章只證明誰依某種方案報告資料;本身不證明資料新鮮、來源獨立、市場深度充足或經濟上正確。
運作方式
- 鎖定部署:鏈、區塊、使用端合約與函式、資產合約、資料源代理或池、聚合器、基礎與報價資產、小數位數、管理員及升級狀態。
- 對應從交易所、池或報告者,經聚合、簽章、代理或轉接器、備援機制到使用邏輯的完整信任路徑;記錄共用的場所、營運者、金鑰與治理,不能把不同標籤直接視為獨立來源。
- 精確重現鏈上讀取:答案、輪次中繼資料、時間戳、適用的信賴區間或狀態、小數正規化、報價方向反轉、排序器狀態與寬限期、最大資料年齡、偏差界限,以及零值或負值處理。
- 建立使用端曝險帳本:擔保品係數、清算門檻、借款與供應上限、可用流動性、債務、鑄造或贖回限額、關閉因子、清算獎勵,以及該數值可啟用的所有操作。
- 依可執行規模模擬操縱,納入準備金、活躍流動性、觀察值、視窗與加權慣例、費用、套利、區塊排序、閃電或自有資金、平倉損失、gas、MEV 及競爭清算者。
- 測試控制與故障狀態:獨立來源、TWAP 觀察容量、限額、熔斷器、暫停權限、時間鎖、過時或偏離的備援資料、報告者或金鑰遺失、L2 排序器停機、真實價格跳空,以及 fail-open 與 fail-closed 行為。
- 監控並核對 canonical 資料輪次、代理與設定變更、來源偏差、協定操作、清算、壞帳、暫停及復原決策;流動性、資產上架、升級或市場狀態改變後重新分析。
現貨 AMM 讀數通常可在單筆交易內改變。時間加權平均要求跨觀察值維持影響,可能提高攻擊成本,但安全性取決於具體算術或 tick 慣例、視窗、觀察容量、流動性分布及區塊控制。中位數能排除部分異常值,但上游場所相關或法定人數不足仍會損害安全性或活性。心跳與偏差設定決定部分資料源何時發布;使用端仍須制定自身的新鮮度與有效性政策。
計算範例
- 恆定乘積現貨。 忽略池的費用,準備金為
1,000,000 ABC與1,000,000 USDC,因此k = 10^12。目標邊際價格9 USDC/ABC要求準備金變為3,000,000 USDC與333,333.333333 ABC:交易者投入2,000,000 USDC,取得666,666.666667 ABC。最終邊際價格為3,000,000 / 333,333.333333 = 9,平均成交價為2,000,000 / 666,666.666667 = 3 USDC/ABC。相較之下,投入5,000,000 USDC後準備金為6,000,000與166,666.666667,邊際價格是36,不是9。實際費用、套利、集中流動性與平倉會改變帳本。 - TWAP 慣例。 十個等權一分鐘觀察值中,九個價格為
100,一個為160。教學用算術 TWAP 為(9 * 100 + 160) / 10 = 106,只比 100 高6%,即使最後現貨高出60%。若其他九個仍為 100,要使算術平均達到130,遭操縱的觀察值必須是400。Uniswap v3 的 tick 均值採幾何口徑,並非此算術範例,因此使用端必須重現已部署慣例。 - 中位數與法定人數。 七個正規化觀察值為
[99, 100, 100, 101, 101, 500, 600];中位數為101,兩個極端報告無法讓結果偏離誠實值群。若接受結果需要五個即時報告,而三個誠實報告者離線,就只剩4 < 5:抵抗異常值不等於可用性,備援行為也成為安全模型的一部分。 - 過時資料與錯誤清算。 八位小數的資料源回傳原始值
140,000,000,000,即1,400,但資料年齡為17 minutes,超過使用端上限15 minutes,因此應拒絕。若仍用該過時數值計算10 ETH、75%清算門檻及12,000債務,健康因子為10 * 1,400 * 0.75 / 12,000 = 0.875;按最新價格2,000計算則為1.25。之後修正價格不會撤銷已完成的清算。
風險
- 鏈、資產、資料源、代理、池或使用端地址錯誤。
- 基礎與報價資產方向反轉,或計價單位不一致。
- 資料源、代幣與內部定點數的小數正規化錯誤。
- 接受過時資料,或誤把心跳與偏差觸發條件當成新鮮度保證。
- 接受不完整輪次、無效狀態、零值、負值、封頂值或越界答案。
- 流動性薄弱的單一場所現貨價格控制龐大協定曝險。
- TWAP 視窗過短、觀察稀疏、加權錯誤或讀取方向錯誤。
- 誤解觀察容量、初始化、內插或備援行為。
- 集中或即時流動性使池總價值無法反映攻擊成本。
- 多個資料源共用相同交易所、資料商、營運者、金鑰或控制平面。
- 報告者、交易所、API、簽署者、網路或法定人數故障破壞更新或完整性。
- L2 排序器停機,或復原寬限期缺失、設定錯誤,暴露過時狀態。
- 備援資料過時、循環相依、相關、縮放不同或語意不相容。
- 閃電流動性與原子可組合性使短暫影響可用於獲利。
- 預言機更新排序、搶先交易、夾擊、尾隨交易或清算 MEV 改變收益。
- 擔保品係數、清算門檻、限額、獎勵與可用流動性放大小幅錯誤。
- 治理方、管理員、guardian、多簽或簽署金鑰遭攻破,改變信任路徑。
- 代理、聚合器、轉接器、升級、儲存或設定錯誤選取錯誤數值。
- 熔斷器或 fail-closed 邏輯在壓力期凍結正常借貸、還款或清算。
- 暫停、復原、帳戶核對、壞帳分配或跨協定隔離失敗。
常見誤解
- 「每次預言機攻擊都會攻破預言機網路。」 許多故障利用薄弱來源、過時數值、錯誤單位、不安全轉接器或使用邏輯,而報告網路仍按設定運作。
- 「多個或去中心化資料源保證價格正確。」 來源獨立性與品質、法定人數、新鮮度、單位、聚合與使用端檢查仍不可少。
- 「TWAP 讓操縱不可能發生。」 它改變影響所需時長與成本;薄弱視窗、稀疏觀察、淺流動性或區塊控制仍可能遭利用。
- 「禁止閃電貸就能消除預言機風險。」 閃電貸只是一種融資方式;自有資金、信用、跨協定借貸、報告者遭攻破及設定錯誤仍存在。
- 「價格復原就會撤銷損失。」 canonical 借貸、鑄造、贖回、結算及清算仍然有效,除非協定另有獲授權的復原流程。
相關主題
資料來源
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security(存取日期:2026-08-13)
- Chainlink Data Feeds - Chainlink Documentation(存取日期:2026-08-13)
- Data Feeds API Reference - Chainlink Documentation(存取日期:2026-08-13)
- L2 Sequencer Uptime Feeds - Chainlink Documentation(存取日期:2026-08-13)
- Uniswap v2 Core - Uniswap Labs(存取日期:2026-08-13)
- Price Oracles - Uniswap Developers(存取日期:2026-08-13)
- Oracles - Aave Protocol Documentation(存取日期:2026-08-13)
- Flash Loans - Aave Protocol Documentation(存取日期:2026-08-13)