Volver al blog

Cuando "SafeMint" Se Vuelve Inseguro: Lecciones del Incidente de Seguridad de HypeBears

Code Auditing
3 de febrero de 2022
2 min de lectura

En la mañana del 3 de febrero (zona horaria +8), nuestro sistema reportó una transacción de ataque 0xfa97c3476aa8aeac662dae0cc3f0d3da48472ff4e7c55d0e305901ec37a2f704 hacia el contrato NFT de HypeBears. Tras la investigación, descubrimos que se trata de un ataque de reentrada causado por la función _safeMint de ERC721.

La causa raíz

El proyecto tiene una limitación en la cantidad de NFTs que una cuenta puede acuñar. Básicamente, tiene un mapa addressMinted que registra si una cuenta ha acuñado los NFTs.

Al acuñar NFTs, el código utiliza la función _safeMint de la implementación de referencia de OZ. Esta función es safe (segura) porque verifica si el receptor puede recibir tokens ERC721, lo que puede prevenir el caso en que un NFT sea acuñado hacia un contrato que no pueda manejar tokens ERC721. Según la documentación:

Si to hace referencia a un contrato inteligente, debe implementar IERC721Receiver.onERC721Received, que es llamado durante una transferencia segura. El siguiente código muestra la implementación de OZ de la función _safeMint.

Sin embargo, esta llamada a función externa crea una brecha de seguridad. Específicamente, el atacante puede realizar una llamada reentrante dentro del callback onERC721Received. Por ejemplo, en el contrato vulnerable de HypeBears, el atacante puede invocar nuevamente la función mintNFT en el callback onERC721Received (ya que addressMinted no ha sido actualizado).

El ataque

La siguiente captura de pantalla muestra la transacción del ataque.

Lecciones

El riesgo ocasionado por SafeMint ha sido discutido por investigadores de seguridad enlace1 enlace2. Sin embargo, aún podemos ver el código vulnerable y el ataque en la práctica. Como se muestra con safeTransfer en el incidente de seguridad de QBridge, usar una función segura no garantiza un contrato seguro 😃.

Apúntate para recibir las novedades
Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec

Este informe semanal cubre dos incidentes de seguridad ocurridos en Ethereum y BNB Chain durante el período 19/10/2026–25/10/2026. Examina una toma de control de la gobernanza de X100 Freezer financiada mediante un préstamo flash y un fallo en la liquidación de impuestos que afectó a un pool de liquidez de un token NEM en BNB Chain. Las pérdidas estimadas dentro del alcance del informe suman aproximadamente 5,57 millones USD: ~4,75 millones USD de la transacción representativa de X100 y ~820 mil USD del incidente del pool de NEM. El total excluye las extracciones posteriores de X100 reportadas por separado.

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec
Security Insights

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec

Este informe semanal cubre 3 incidentes de seguridad correspondientes al período 12/10/2026–18/10/2026, con pérdidas totales estimadas en aproximadamente 3,87 millones USD. Autheo Network sufrió una vulneración de clave privada con pérdidas de aproximadamente 1,76 millones USD; Qubic Wallet perdió aproximadamente 1,30 millones USD debido a la generación de una semilla débil; y los contratos Smart Token Vesting V2 de UNCX Network sufrieron un error contable con pérdidas de aproximadamente 807 mil USD en Ethereum, BNB Chain, Base y Robinhood Chain. El análisis destacado de UNCX explica cómo un cálculo agregado de participaciones defectuoso mezcló tramos de adquisición de derechos creados con distintas proporciones entre tokens y participaciones, lo que permitió retiros excesivos de pools compartidos.

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec

Ethereum (05–11/10/2026): 1 incidente; pérdida estimada de $542 mil. MakerDaoBot, sin control de acceso, dio a un adaptador malicioso acceso a sus saldos MakerDAO. Este cerró 4 subastas ETH-A y convirtió 200 ETH-A en WETH; el atacante los cambió por 200 ETH y se los envió.

El mejor auditor de seguridad para Web3

Valida el diseño, el código y la lógica de negocio antes del lanzamiento, siguiendo los estándares de seguridad más exigentes del sector.

Auditoría de BlockSec