Back to Blog

Quando "SafeMint" Se Torna Inseguro: Lições do Incidente de Segurança do HypeBears

Code Auditing
3 de fevereiro de 2022
2 min read

Na manhã do dia 3 de fevereiro (fuso horário +8), nosso sistema reportou uma transação de ataque 0xfa97c3476aa8aeac662dae0cc3f0d3da48472ff4e7c55d0e305901ec37a2f704 contra o contrato NFT HypeBears. Após a investigação, descobrimos que se trata de um ataque de re-entrância causado pela função _safeMint do ERC721.

A causa raiz

O projeto possui uma limitação na quantidade de NFTs que uma conta pode cunhar. Basicamente, ele possui um mapa addressMinted que registra se uma conta já cunhou os NFTs.

Ao cunhar NFTs, o código utiliza a função _safeMint da implementação de referência do OZ. Essa função é considerada safe (segura) porque verifica se o receptor pode receber tokens ERC721. Isso pode evitar o caso em que um NFT seja cunhado para um contrato que não consegue lidar com tokens ERC721. De acordo com a documentação:

Se to se referir a um contrato inteligente, ele deve implementar IERC721Receiver.onERC721Received, que é chamado durante uma transferência segura. O código a seguir mostra a implementação OZ da função _safeMint.

No entanto, essa chamada de função externa cria uma brecha de segurança. Especificamente, o atacante pode realizar uma chamada reentrante dentro do callback onERC721Received. Por exemplo, no contrato vulnerável HypeBears, o atacante pode invocar a função mintNFT novamente no callback onERC721Received (já que addressMinted ainda não foi atualizado.)

O ataque

A captura de tela a seguir mostra a transação de ataque.

Lições

O risco causado pelo SafeMint já foi discutido por pesquisadores de segurança link1 link2. No entanto, ainda podemos observar código vulnerável e ataques na prática. Como demonstrado pelo safeTransfer no incidente de segurança do QBridge, utilizar uma função safe não garante um contrato safe 😃.

Sign up for the latest updates
Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec
Security Insights

Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec

Este relatório semanal aborda dois incidentes de segurança na Ethereum e na BNB Chain no período de 19/10/2026–25/10/2026. Ele examina uma tomada de controle da governança do X100 Freezer financiada por um empréstimo-relâmpago e uma falha na liquidação de impostos que afetou um pool de liquidez de um token NEM na BNB Chain. As perdas estimadas no escopo do relatório totalizam aproximadamente 5,57 milhões USD: cerca de 4,75 milhões USD da transação representativa do X100 e cerca de 820 mil USD do incidente no pool do NEM. O total exclui as extrações subsequentes do X100 relatadas separadamente.

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec
Security Insights

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec

Este relatório semanal aborda 3 incidentes de segurança no período de 12/10/2026–18/10/2026, com perdas totais estimadas em aproximadamente 3,87 milhões USD. A Autheo Network sofreu um comprometimento de chave privada com perdas de cerca de 1,76 milhões USD, a Qubic Wallet perdeu cerca de 1,30 milhões USD devido à geração de seeds fracas, e os contratos Smart Token Vesting V2 da UNCX Network sofreram um erro contábil de cerca de 807 mil USD nas redes Ethereum, BNB Chain, Base e Robinhood Chain. A análise em destaque da UNCX explica como um cálculo incorreto do total de cotas misturou parcelas de vesting criadas com diferentes proporções entre tokens e cotas, permitindo saques acima do devido de pools compartilhados.

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec
Security Insights

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec

O relatório cobre 1 incidente no Ethereum (05–11/10/2026), com perda estimada de US$ 542 mil. Um adaptador malicioso obteve acesso aos saldos MakerDAO via função desprotegida do MakerDaoBot, liquidou 4 leilões ETH-A e converteu 200 ETH-A em WETH, depois enviados como ETH ao atacante.

Best Security Auditor for Web3

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

BlockSec Audit