返回博客

当“SafeMint”不再安全:HypeBears安全事件的教训

Code Auditing
2022年2月3日
阅读约 2 分钟

在东八区时间 2 月 3 日上午,我们的系统报告了一笔针对 HypeBears NFT 合约的攻击交易 0xfa97c3476aa8aeac662dae0cc3f0d3da48472ff4e7c55d0e305901ec37a2f704。经过调查,我们发现这是由 ERC721 的 _safeMint 函数引起的重入攻击。

根本原因

该项目对一个账户可以铸造的 NFT 数量有限制。基本上,它有一个 addressMinted 的映射,用于记录一个账户是否已经铸造过 NFT。

在铸造 NFT 时,代码使用了 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日,攻击者利用第三方安全产品漏洞,获取内部凭证并伪造提现指令,导致Bitget部分运营钱包资金转出约3.875亿美元,涉及以太坊、其他EVM网络、XRP Ledger、Zcash和TRON,私钥及冷钱包未受影响。本文梳理事件路径与资金流向,分析资产快速转换及生态恢复应对,提出机构纵深防御体系,并说明授权区块链渗透测试如何验证跨层安全假设。

损失约1130万美元:Multicall Router、Nostra | BlockSec Weekly
Security Insights

损失约1130万美元:Multicall Router、Nostra | BlockSec Weekly

本报告覆盖2026/09/14至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-09/13,分析两起共损失约3.2亿美元的安全事件,含此前未覆盖的Liquid Network于09/06遭利用事件。较大事件中,Elements的rangeproof验证缓存因字段拼接无分隔符导致验证结果错配,攻击者伪造4000枚无支撑L-BTC并几乎全部兑出。Symbiosis跨链桥比特币路线因手续费未做负值校验,330聪存款铸造出46,116,860,184.27388234 syBTC,流动性池仅存11.26 syBTC,致约970万美元损失(约9.97 BTC)。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

BlockSec 审计