返回部落格

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

訂閱最新動態
損失約940萬美元:Injective、Aquifer遭利用攻擊 | BlockSec Weekly
Security Insights

損失約940萬美元:Injective、Aquifer遭利用攻擊 | BlockSec Weekly

過去一週(2026/08/31 - 2026/09/06),四起安全事件導致Injective、Solana、Ethereum和Flow EVM共損失約940萬美元。最大損失來自Injective漏洞,保險基金識別碼與二元期權市場識別碼衝突,結算路徑未比對其計價單位,導致約480萬美元流失;Solana上的Aquifer因交換路徑呼叫未經驗證的呼叫者提供的Token Program,損失約247萬美元;Ethereum上的Notional Finance V1因未檢查的`uint128`轉型將債務估值為零,損失約173萬美元。Flow EVM上的Ankr FLOW以約41萬美元收尾,因質押入口跳過暫停保護並依過時比率鑄幣。

超越智能合約:Web3中的網域與DNS營運安全
Security Insights

超越智能合約:Web3中的網域與DNS營運安全

合約審計止步於合約本身。我們針對 DefiLlama TVL 前 100 名背後的 100 個網域,執行了八項基於 SEAL 的 DNS 與註冊商檢查——共 800 項檢查,僅有一個網域全數通過。以下是大多數專案缺失的四項關鍵控制,以及它們在用戶入口點的重要性。

Web3攻擊面:滲透測試概覽

Web3攻擊面:滲透測試概覽

加密機構保留所有傳統攻擊面,並疊加資金處理鏈。本文為測試人員提供系統的實用抽象:四組件模型——應用、授權與簽名、區塊鏈互動、基礎設施,說明各組件職責、代表性實現及繼承的攻擊面。並將web3特有範疇分為五大攻擊面:生產與自動化運維、簽名意圖、審批與提款鏈、資金邏輯、鏈上交易與已部署合約。

Web3 最佳安全審計方

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

BlockSec 審計