返回部落格

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,000 到 100,000 不等的 USTC,重複開啟了許多此類倉位。

1.2 攻擊

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

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

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

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

2. 漏洞修復

該漏洞已在此 Commit 中修復。

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

3. 結論

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

訂閱最新動態
Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇
Security Insights

Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇

2026年9月24日,攻擊者利用第三方安全產品漏洞,獲取內部憑證並偽造提款指令,導致約3.875億美元從Bitget部分營運錢包(涵蓋Ethereum、其他EVM網絡、XRP Ledger、Zcash及TRON)轉出;私鑰及冷錢包未受影響。本文深入梳理事件路徑與資金流向,分析快速轉換為原生資產及生態恢復應對,提出機構縱深防禦框架,並說明授權區塊鏈滲透測試如何驗證跨層假設。

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly
Security Insights

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly

本報告涵蓋2026/09/14至2026/09/20期間,探討以太坊與Starknet上兩起合計損失約1130萬美元的安全事件。較大一起中,多重呼叫路由器將自身位址接受為分派目標,導致巢狀呼叫以路由器自身已授權身分而非外部呼叫者身分進入Safe錢包的Gateway模組,約2900枚`aEthrsETH`被轉出至攻擊者建立的Uniswap v4池。在Starknet上,Nostra預言機整合僅要求最少一個聚合來源,當三個設定價格來源中僅兩個達成聚合時,操縱的薄池報價與正常報價平均後將`NSTR`估值約49.52美元,支撐約350萬美元以高估抵押品借貸。

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec
Security Insights

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec

本報告涵蓋2026/09/07至2026/09/13,探討兩起造成約3.2億美元損失的安全事件,包括前份報告未提及、發生於2026/09/06的Liquid Network漏洞事件。較大者為該Liquid Network漏洞:Elements中的rangeproof驗證快取藉由雜湊四個欄位(其中兩個長度可變)串接而成金鑰,且未標示欄位邊界,導致某輸出的驗證結果被錯誤套用至另一個未經檢驗證明的輸出,使攻擊者得以憑空創造4,000枚無擔保L-BTC,並將幾乎全數兌回比特幣。在橫跨BNB Smart Chain、Ethereum與Rootstock的Symbiosis跨鏈橋比特幣路徑中,讀取比特幣存款的鏈下程式碼從存款人可自行控制的欄位取得其身份,並在未檢查手續費是否為負值的情況下自存款中扣除,使330聰的存款鑄造出`46,116,860,184.27388234 syBTC`;其須賣出所經之資金池僅有11.26 syBTC,致使流動性提供者與用戶損失約9.97 BTC(約77萬美元)。

Web3 最佳安全審計方

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

BlockSec 審計