Eggstravaganza

First Flight #37
Beginner FriendlySolidity
100 EXP
View results
Submission Details
Severity: high
Valid

Weak Randomness in searchForEgg() __ EggHuntGame.sol

Summary

Weak Randomness which allows anyone to manipulate the outcome .

Vulnerability Details

This method is vulnerable because both block.timestamp and block.prevrandao are values that can be influenced by miners. Therefore, malicious actors could manipulate these values to generate a favorable outcome (e.g., determining whether they find an egg for a reduced price or with some other advantage).

function searchForEgg() external {
require(gameActive, "Game not active");
require(block.timestamp >= startTime, "Game not started yet");
require(block.timestamp <= endTime, "Game ended");
// Pseudo-random number generation (for demonstration purposes only)
uint256 random = uint256(
keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, eggCounter))
) % 100;
if (random < eggFindThreshold) {
eggCounter++;
eggsFound[msg.sender] += 1;
eggNFT.mintEgg(msg.sender, eggCounter);
emit EggFound(msg.sender, eggCounter, eggsFound[msg.sender]);
}
}

Impact

Manipulating the outcome

Tools Used

Manual review

Recommendations

Use Chainlink VRF for Secure Randomness

Updates

Lead Judging Commences

m3dython Lead Judge 10 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Insecure Randomness

Insecure methods to generate pseudo-random numbers

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!