返回部落格

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

訂閱最新動態
NEAR Intents 遭攻擊:退款漏洞與資安教訓
Security Insights

NEAR Intents 遭攻擊:退款漏洞與資安教訓

NEAR Intents 遭到攻擊時,攻擊者利用金額過大的退款事件,在存入的資產退回後仍保留內部餘額。本文分析重建回執流程及 BNB Chain 上合計 3,865,021 USDT 的七筆出金,將這些資金流出與專案方所稱的資金全數追回區分開來,並概述開發及審計 NEAR 智能合約時應注意的安全事項。

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報
Security Insights

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報

本週報涵蓋 2026年10月19日–2026年10月25日 期間發生在 Ethereum 和 BNB Chain 上的兩起安全事件。報告分析了以閃電貸提供資金、奪取 X100 Freezer 治理權的事件,以及影響 BNB Chain 上某個 NEM 代幣流動性池的稅費結算缺陷。報告範圍內的估計損失合計約 557萬 USD:具代表性的 X100 交易造成約 475萬 USD 的損失,NEM 流動性池事件造成約 82.0萬 USD 的損失。此合計金額不包含另行報導的後續 X100 資金提取。

損失約 387萬 USD:Autheo Network、UNCX 遭駭|BlockSec 週報
Security Insights

損失約 387萬 USD:Autheo Network、UNCX 遭駭|BlockSec 週報

本週報告涵蓋 2026年10月12日–2026年10月18日 期間的 3 起安全事件,估計總損失約為 387萬 USD。Autheo Network 因私鑰遭入侵損失約 176萬 USD;Qubic Wallet 因種子產生機制薄弱損失約 130萬 USD;UNCX Network 的 Smart Token Vesting V2 合約在 Ethereum、BNB Chain、Base 和 Robinhood Chain 上因帳務計算錯誤造成約 80.7萬 USD 的損失。重點分析的 UNCX 事件說明,有缺陷的份額總計計算如何將以不同代幣與份額比率建立的代幣歸屬批次混在一起,進而使人得以從共用資金池超額提領。

Web3 最佳安全審計方

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

BlockSec 審計
Seal Finance 安全事件