
EggHuntGame: un juego NFT de cacería con recompensas únicas
EggHuntGame fue una experiencia gamificada basada en NFTs, donde los participantes debían encontrar "huevos ocultos" dentro de un entorno interactivo para obtener NFTs únicos llamados Eggstravaganza Eggs. Durante un periodo de juego definido, los jugadores recorrían el sistema en busca de estos huevos virtuales, y una vez encontrados, podían almacenarlos en un Egg Vault seguro. Esta dinámica no solo incentivaba la exploración, sino también la competencia entre usuarios por recompensas escasas y exclusivas.
Actores
Game Owner: El desplegador/administrador que inicia y termina el juego, ajusta los parámetros y gestiona la propiedad.
Player: Participantes que ejecutan la función de búsqueda de huevos, mintean NFTs tras encontrarlos y pueden depositarlos en la bóveda.
Vault Owner: El propietario del contrato EggVault encargado de gestionar los huevos depositados.
Vulnerabilidad ALTA - Pseudo-Random Number Generation
Descripción
La función searchForEgg utiliza un método de generación de números pseudoaleatorios basado en el hash keccak256 con los siguientes valores de entrada: block.timestamp, block.prevrandao, msg.sender y eggCounter. Este enfoque no es criptográficamente seguro y puede ser predecible por un atacante, lo que lo hace inadecuado para juegos con recompensas reales o para asegurar acciones aleatorias dentro de contratos inteligentes.
El método actual intenta generar aleatoriedad combinando datos del bloque y detalles de la transacción. Sin embargo, estos valores pueden ser influenciados o anticipados por mineros y otros participantes, lo que podría permitir a usuarios maliciosos explotar el sistema.
Impacto
La aleatoriedad generada mediante keccak256 con entradas predecibles no es segura y puede ser manipulada. Esto podría provocar resultados de juego sesgados, permitiendo que algunos participantes predigan o controlen el resultado. En un escenario de juego como este, donde la imparcialidad en el descubrimiento de huevos es crucial, dicha vulnerabilidad puede afectar seriamente la integridad del juego y la confianza de los usuarios.
Línea afectada: https://github.com/CodeHawks-Contests/2025-04-eggstravaganza/blob/main/src/EggHuntGame.sol#L70
Prueba de concepto:
Este número puede ser influenciado por:
El timestamp del bloque actual (block.timestamp), el cual puede ser manipulado por los mineros.
block.prevrandao, que representa la aleatoriedad del bloque anterior y también puede ser influenciada por el productor del bloque.
msg.sender y eggCounter, que son conocidos por quien realiza la llamada y, por lo tanto, son predecibles.
Un atacante podría utilizar su conocimiento del timestamp del bloque actual o de prevrandao para predecir el resultado del número aleatorio.
Recomendaciones para mitigacion:
Para mejorar la aleatoriedad y garantizar la equidad, se recomienda utilizar una fuente de aleatoriedad segura y verificable, como Chainlink VRF (Verifiable Random Function). Chainlink VRF proporciona un número aleatorio criptográficamente seguro que puede ser verificado on-chain, asegurando que la aleatoriedad utilizada en las decisiones del contrato sea verdaderamente impredecible.
Ejemplo de uso de Chainlink VRF:
Importar Chainlink VRF e implementar la interfaz requerida.
Solicitar un número aleatorio al servicio de Chainlink VRF.
Utilizar el número aleatorio resultante dentro de la lógica del juego.
Validación de Juez


Entradas relacionadas
HackSyndicate
Home
About
Contact
© 2025 HackSyndicate. Todos los derechos reservados.


