返回部落格

Mirror Protocol 如何被攻擊

Code Auditing
2022年5月31日
閱讀約 4 分鐘

Mirror Protocol 被 @FatMan 舉報遭到攻擊。這篇部落格有關於此事的詳細報導。 在這篇短文中,我們將透過攻擊交易來詳細說明此事件是如何發生的。

免責聲明:本文基於公開的交易紀錄以及我們對 Mirror 協議與 Terra 生態系統的理解。如果內容有任何不準確之處,請告知我們。歡迎對此部落格提出任何意見。

1 攻擊

1.1 準備階段

交易用於準備攻擊。

第 1 步: 在此交易中,攻擊者首先發送了 100,000 USTC 到鎖定合約(lock contract)。這對於開啟倉位並非必要,但對於此次攻擊至關重要。

第 2 步: 隨後,攻擊者透過存入 10 USTC 作為抵押品,並將 collateral_ratio 設定為 2.5,開啟了一個倉位。

這裡指定了 short_params,以便鑄造合約(mint contract)自動出售所鑄造的 mAsset(即 mETH),並將所得的 USTC 添加到該倉位的鎖定金額中。

第 2.1 步: 我們來逐步分析該交易。首先,將調用 open_position 函數來開啟一個 ID 為 43186 的空頭倉位。

第 2.2 步: 由於添加了可選的 short_params,合約將首先鑄造 0.001208 mETH(基於當前的 ETH 價格),然後透過在 mETH-UST Pair 中進行兌換來賣出它。

第 2.3 步:0.001208 mETH 將被兌換成 4.06582 USTC,扣除相關費用(如稅費)後,兌換所得的 USTC 將發送到鎖定合約。這是因為開啟的倉位只能在一段時間後才能解鎖。

第 2.4 步: 接著將調用 lock_position_funds_hook。在此函數中,position_locked_amount 是透過查詢 current_balance 並與 locked_funds 進行比較來計算的。

然而,正如我們在第 1 步中所見,由於 100,000 USTC 已被直接轉移到鎖定合約中,計算出的 locked_amount 將約為 100,004 USTC,而不是 4 USTC。

第 2.5 步: 最後,將調用 increase_short_token 來記錄 sLP 代幣。

至此,攻擊者透過將 100,000 USTC 直接發送到鎖定合約,並存入 10 USTC 作為抵押品,成功開啟了一個倉位。該倉位的鎖定金額約為 100,004 USTC,且可在一段時間後解鎖。攻擊者透過發送 1,000100,000 不等的 USTC,重複開啟了許多此類倉位。

1.2 攻擊

Mirror Protocol 沒有檢查倉位 ID 是否重複。在這種情況下,攻擊者可以提供多個重複的倉位 ID,從而反覆解鎖同一個倉位中的鎖定金額。

交易即為攻擊交易。例如,對於倉位 ID 43186,攻擊者重複了 437 次。

由於原始合約程式碼沒有檢查重複項,大約 43.7M437 * 0.1M)USTC 已被解鎖(在單次函數調用中)。

請注意,其他倉位也透過相同的機制被解鎖了。

2. 漏洞修復

該漏洞已在此 Commit 中修復。

具體來說,unlockable_positions 是一個包含待解鎖倉位 ID 的向量(vector)。在原始程式碼中,沒有檢查 unlockable_positions 中是否存在重複 ID。修復後的程式碼增加了對倉位 ID 重複性的檢查。

3. 結論

正如 @FatMan 和其他社群成員所指出的,這個 BUG 存在了幾個月並已在外部遭到利用。我們認為,對於已經在外部被利用的漏洞進行靜默修復並非良好的安全實踐。此外,我們也認為高知名度的 DeFi 專案應部署一些守門機制,以主動監控其應用程式的狀態,並在發生異常情況時發出警報。

訂閱最新動態
超越智能合約:Web3中的網域與DNS營運安全
Security Insights

超越智能合約:Web3中的網域與DNS營運安全

合約審計止步於合約本身。我們針對 DefiLlama TVL 前 100 名背後的 100 個網域,執行了八項基於 SEAL 的 DNS 與註冊商檢查——共 800 項檢查,僅有一個網域全數通過。以下是大多數專案缺失的四項關鍵控制,以及它們在用戶入口點的重要性。

Web3攻擊面:滲透測試概覽

Web3攻擊面:滲透測試概覽

加密機構保留所有傳統攻擊面,並疊加資金處理鏈。本文為測試人員提供系統的實用抽象:四組件模型——應用、授權與簽名、區塊鏈互動、基礎設施,說明各組件職責、代表性實現及繼承的攻擊面。並將web3特有範疇分為五大攻擊面:生產與自動化運維、簽名意圖、審批與提款鏈、資金邏輯、鏈上交易與已部署合約。

損失約2,300萬美元:Cosmos EVM、Moonwell 遭利用 | BlockSec Weekly
Security Insights

損失約2,300萬美元:Cosmos EVM、Moonwell 遭利用 | BlockSec Weekly

報告期間(2026/08/22 - 2026/08/30)內,共涵蓋5起區塊鏈安全事件,損失約2,270萬美元;Tectonic遭抽走約7,400萬至1.195億美元,其中大部分因Cronos回滾至攻擊前狀態而消除。重點事件為橫跨六條鏈的Cosmos EVM漏洞系列(實際損失約570萬美元),於TAC Chain追蹤發現,一個共享餘額同步漏洞串聯下溢與上溢攻擊,抽乾質押池。報告亦分析Moonwell的抵押品計算與預言機價格操縱組合攻擊、Tectonic針對低流動性抵押品的預言機價格與憑證代幣匯率操縱組合攻擊、Ajna清算業務邏輯漏洞,以及Solana上的Rain Card合約漏洞系列,涉及Ed25519簽名驗證繞過(Avici、Tria等)。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計
Mirror Protocol 如何被攻擊