The selectWinner() function is designed to randomly select a winner from the players array and send them the prize pool. The function should only select valid participant addresses.
When a player calls refund(), their address in the array is replaced with address(0) rather than being removed. The selectWinner() function does not validate that the selected winner is a non-zero address, allowing the prize pool to be sent to address(0) and permanently burned.
Likelihood: Medium
Any player can refund at any time during the raffle, creating zero-address slots in the array
The random winner selection has no exclusion logic for zero addresses
Impact: High
Complete and permanent loss of the entire prize pool
All participants lose their potential winnings
Alice enters the raffle and is assigned index 7 in the players array
Alice decides to refund her entry by calling refund(7)
Her address at index 7 is replaced with address(0)
The raffle ends and selectWinner() is called
The random winner index calculation returns 7
The prize pool is sent to address(0), permanently burning all funds
Alternatively, properly remove players from the array in refund():
## Description In the `selectWinner` function, when a player has refunded and their address is replaced with address(0), the prize money may be sent to address(0), resulting in fund loss. ## Vulnerability Details In the `refund` function if a user wants to refund his money then he will be given his money back and his address in the array will be replaced with `address(0)`. So lets say `Alice` entered in the raffle and later decided to refund her money then her address in the `player` array will be replaced with `address(0)`. And lets consider that her index in the array is `7th` so currently there is `address(0)` at `7th index`, so when `selectWinner` function will be called there isn't any kind of check that this 7th index can't be the winner so if this `7th` index will be declared as winner then all the prize will be sent to him which will actually lost as it will be sent to `address(0)` ## Impact Loss of funds if they are sent to address(0), posing a financial risk. ## Recommendations Implement additional checks in the `selectWinner` function to ensure that prize money is not sent to `address(0)`
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.