返回部落格

Seal Finance 安全事件

Code Auditing
2021年1月3日
閱讀約 5 分鐘

11 月 30 日,我們的安全事件監控系統 ThunderForecast 通過掃描以太坊上的歷史交易,發現了針對 Loopring 協議的攻擊(部落格 英文版、中文版)。結論是,此次攻擊的根本原因是 sellTokenForLRC 函數缺乏存取控制。攻擊者獲取了 80.97 ETH,按當時價格計算相當於 48,849.2 美元。

2020 年 12 月 11 日,我們的監控系統 ThunderForecast 報告了一系列交易匯率異常的交易。隨後,我們使用研究團隊開發的 EthScope 系統 對這些交易進行了分析,發現這是一次利用 Seal Finance 協議漏洞進行套利的攻擊。

什麼是 Seal?

正如 Seal 白皮書 中所述:「SEAL 是一個實驗性協議,作為主要 DeFi 協議代幣之間的中介,旨在創建更深度的流動性」。截至目前,存在超過 10 個流動性資金池,將 Seal 與其他知名的代幣(如 UNI、YFI、USDT、SNX 等)掛鉤。為了賺取獎勵,投資者需要將 LP 代幣存入 SEAL 獎勵合約,並觸發 Farm 合約中的 breed() 函數來產生新的 SEAL 代幣。Farm 合約部署在每個 Seal 資金池中,合約中的 breed() 函數用於發行新的 Seal 代幣。根據 breed() 的設置,它會額外發行 1.6% 的 Seal 代幣。此外,0.8% 的已發行 Seal 代幣會被兌換為另一種代幣,並與另外 0.8% 的已發行 Seal 代幣一同存入資金池作為流動性。然而,由於 breed() 函數沒有設計存取控制,任何人都可以觸發該函數,這種原始的設計成為此次報告攻擊的根本原因。

以下是經確認的 breed() 函數原始碼:

function breed() external {
	require(now / 1 days > today);
	today += 1;
 
	uint256 sealPairAmount = seal.balanceOf(address(cSeal));
	uint256 tokenPairAmount = token.balanceOf(address(cSeal));
	uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
	uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
 
	seal.mint(address(cSeal), newSeal);
	if(address(seal) < address(token))
    	cSeal.swap(0, amount, address(this), "");
	else
    	cSeal.swap(amount, 0, address(this), "");
	token.transfer(address(cSeal), amount);
	seal.mint(address(cSeal), newSeal);
	cSeal.mint(address(this));
}

詳細分析

我們現在透過一筆攻擊 交易 來揭露更多攻擊細節。在此交易中,攻擊者對 10 個 Seal 資金池重複了攻擊邏輯,以實現利潤最大化。在接下來的分析中,我們重點關注在 Seal-SNX 資金池中發起的攻擊。

過程涉及三個步驟:

  • 步驟 1:在 Seal-SNX 資金池中將 1,084 Seal 兌換為 2,787 SNX。交易匯率為:1 Seal = 2.57 SNX。
  • 步驟 2:觸發 Farm 合約中的 breed() 函數。該函數發行了 13.08 Seal 並將其兌換為 10.20 SNX。此時的交易匯率變為:1 SNX = 0.78 Seal。原因是資金池中的大部分 SNX 被兌換為 Seal,導致 SNX 和 Seal 的數量產生巨大差異。隨後,根據 Uniswap 的價格計算演算法,SNX 在資金池中的價值變得極高(價格上漲了 3 倍以上)。
  • 步驟 3:在 Seal-SNX 資金池中將 2787 SNX 兌換為 1100 Seal。由於上述兌換進一步提高了 SNX 的價格,攻擊者套出了更多的 Seal 代幣(額外 16 Seal)。

為了進一步衡量和確認損失,我們使用我們的 EthScope 系統,在攻擊發生前的區塊狀態下重放了 breed() 函數。結果顯示,與正常調用相比,Farm 多發行了 18 個 Seal 代幣。攻擊者取走了 16 個 Seal,資金池中僅剩下 2 個 Seal。

獲利與損失

在此次交易中,攻擊者總共獲利 175 Seal。

攻擊規模

截至 2020 年 12 月 13 日,鏈上共部署了 3 個惡意合約(0x49f93e, 0x8b3710, 0x0f20b6),並成功發起了 22 筆交易,盜取了 4,247 個 Seal 代幣。按當時價格計算,攻擊者利用 Seal 協議的漏洞非法獲利約 58,467 美元。值得一提的是,Seal 協議的漏洞當時仍在遭受攻擊!

此外,透過分析獲利 Seal 代幣的流動,我們發現約 900 個 Seal 代幣被存入 DEX,其餘部分則分發到了 6 個不同的地址。如下圖所示,這些地址除了 Seal Finance 和 Uniswap V2 的流動性資金池外,均為 Seal 代幣的前幾大持有者。

結語

隨著以太坊 DeFi 生態系的發展,各種安全問題逐漸浮現。事實上,導致此次攻擊的根本原因——存取控制缺失,在 2020 年 12 月 13 日前透過 22 筆交易給 Seal 造成了相當大的損失(58,467 美元)。

更新(2021/01/04)

繼 2020 年 11 月 30 日的首次攻擊後,攻擊者又部署了第三個攻擊合約並發起了五次攻擊。最後一次攻擊發生在 2020 年 12 月 24 日,並將獲得的 Seal 代幣轉移到了此地址。在此過程中,攻擊者共獲得了 6,021 個 Seal 代幣。

時間軸:

  • 2020/12/11:發現可疑交易
  • 2020/12/12:完成分析
  • 2020/12/13:向 Seal Finance 回報
  • 2021/01/03:發布詳細資訊
  • 2021/01/03:分配 CVE-2021–3006 編號

關於 BlockSec

BlockSec 是一家開創性的區塊鏈安全公司,由一群全球傑出的安全專家於 2021 年創立。公司致力於提升新興 Web3 世界的安全性和可用性,以促進其大規模採用。為此,BlockSec 提供智慧合約與 EVM 鏈 安全審計 服務;提供用於安全開發與主動阻斷威脅的 Phalcon 平台;提供用於資金追蹤與調查的 MetaSleuth 平台;以及助力 Web3 建設者高效探索加密世界的 MetaSuites 擴充功能。

迄今為止,公司已服務超過 300 家知名客戶,包括 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,並獲得了來自 Matrix Partners、Vitalbridge Capital 和萬向區塊鏈實驗室(Fenbushi Capital)等頂尖投資機構的兩輪數千萬美元融資。

官方網站:https://blocksec.com/

官方 Twitter 帳號:https://twitter.com/BlockSecTeam

訂閱最新動態
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 審計
Seal Finance 安全事件