Puppy Raffle

AI First Flight #1
Beginner FriendlyFoundrySolidityNFT
EXP
View results
Submission Details
Impact: high
Likelihood: high
Invalid

[H-4] Griefing: winner can block selectWinner() by reverting in receive()

Root + Impact

Description

  • Describe the normal behavior in one or more sentences

  • Explain the specific issue or problem in one or more sentences

- selectWinner() revert toujours, la raffle reste bloquée.
- Les fonds sont bloqués indéfiniment.
- Aucun autre tirage n'est possible.

Risk

Likelihood:

  • L'attaquant doit être tiré au sort pour être le gagnant.

  • Il peut augmenter ses chances en entrant plusieurs fois.

  • Une fois élu, l'attaque est triviale à exécuter.

  • selectWinner() revert toujours, la raffle reste bloquée.

  • Les fonds sont bloqués indéfiniment.

  • Aucun autre tirage n'est possible.

Impact:

  • High

Proof of Concept

Décrire : un attaquant entre dans la raffle avec un contrat dont receive() revert. S'il est tiré au sort, selectWinner() revert toujours.

Recommended Mitigation

- (bool success,) = winner.call{value: prizePool}("");
- require(success, "PuppyRaffle: Failed to send prize pool to winner");
+ // Pattern pull over push
+ mapping(address => uint256) public prizes;
+ prizes[winner] = prizePool;
+ // et une fonction claimPrize() que le gagnant appelle lui-même
Updates

Lead Judging Commences

ai-first-flight-judge Lead Judge 44 minutes ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

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

Give us feedback!