返回部落格

當「SafeMint」不再安全:從 HypeBears 安全事件中汲取的教訓

Code Auditing
2022年2月3日
閱讀約 2 分鐘

2 月 3 日上午(時區 +8),我們的系統監測到針對 HypeBears NFT 合約的一筆攻擊交易 0xfa97c3476aa8aeac662dae0cc3f0d3da48472ff4e7c55d0e305901ec37a2f704。經調查發現,這是一起由 ERC721 的 _safeMint 函數引起的重入攻擊。

根本原因

該項目對帳戶可鑄造的 NFT 數量有限制。基本上,它使用一個 addressMinted 映射來記錄帳戶是否已經鑄造過 NFT。

在鑄造 NFT 時,代碼使用了 OpenZeppelin (OZ) 參考實現中的 _safeMint 函數。之所以稱此函數為「安全 (safe)」,是因為它會檢查接收者是否具備接收 ERC721 代幣的能力,這能防止將 NFT 鑄造到無法處理 ERC721 代幣的合約地址。根據 文檔 說明:

如果 to 參數指向一個智能合約,則該合約必須實現 IERC721Receiver.onERC721Received 接口,以便在安全轉帳時被調用。下圖展示了 OZ 對 _safeMint 函數的實現。

然而,這個外部函數調用產生了一個安全漏洞。具體來說,攻擊者可以在 onERC721Received 回調中執行重入調用。例如,在 易受攻擊的 HypeBears 合約中,攻擊者可以在 onERC721Received 回調中再次調用 mintNFT 函數(因為 addressMinted 狀態尚未更新)。

攻擊過程

下圖展示了這筆 攻擊交易。

教訓

SafeMint 帶來的風險已被多位安全研究人員討論過(連結 1,連結 2)。然而,我們仍然能在現實中看到此類易受攻擊的代碼與攻擊事件。正如 QBridge 安全事件 中 safeTransfer 的情況一樣,使用一個名為「安全」的函數並不保證合約本身就是「安全」的 😃。

訂閱最新動態
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 審計