Back to Blog

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

Code Auditing
February 3, 2022
2 min read

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 的情況一樣,使用一個名為「安全」的函數並不保證合約本身就是「安全」的 😃。

Sign up for the latest updates
電子報 - 2026年6月
Security Insights

電子報 - 2026年6月

本月報告涵蓋2026年6月三起最大安全事件,確認損失合計約2200萬美元。一次精密蜜罐攻擊利用未受檢查的代幣授權,從JaredFromSubway的MEV機器人抽走約1500萬美元。兩個舊版Aztec rollup部署因證明結算邊界漏洞損失約435萬美元。SecondFi的Ed25519實現缺陷暴露錢包私鑰,導致374個錢包共損失約240萬美元。三起事件共同模式:表面完整但從未真正執行的安全保證。

~$400萬損失:Taiko、SecondFi遭攻擊 | BlockSec週報
Security Insights

~$400萬損失:Taiko、SecondFi遭攻擊 | BlockSec週報

本週區塊鏈安全報告涵蓋2026年6月22-28日兩起重大事件,以太坊和Cardano確認損失約410萬美元。Taiko橋接漏洞結合了外洩的SGX飛地簽名密鑰與不完整的認證策略,未能拒絕調試飛地,使攻擊者註冊惡意證明者並偽造L2狀態證明。SecondFi錢包漏洞源於Ed25519隨機數派生中的密碼學實現缺陷,移除了秘密輸入,可從Cardano公開交易數據離線恢復私鑰。

~$18M損失:jaredFromSubway、Aztec及更多 | BlockSec每週快報
Security Insights

~$18M損失:jaredFromSubway、Aztec及更多 | BlockSec每週快報

本週區塊鏈安全報告涵蓋2026年6月15日至21日,以太坊與BNB Chain共發生3起重大事件,總損失約1830萬美元。重點分析兩起事件:jaredFromSubway事件揭示反向授權攻擊模式——MEV機器人主動將資產授權給不可信第三方合約套利,攻擊者構造假包裝代幣與交易池,發出真實事件但從未消耗授權額度,損失約1500萬美元。Aztec三日內第二次漏洞:逃生艙ZK電路中`old_data_root`兩個見證值缺少相等約束,致使攻擊者可用偽造Merkle樹證明虛假票據所有權並通過鏈上驗證。

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit