The changeParticipationStatus() function contains a critical vulnerability that allows users to manipulate their participation status without having made any deposits. This can lead to unauthorized participation in the Christmas dinner event and potentially disrupt the event planning.
The vulnerability exists because the function doesn't verify whether the user has actually made any deposits (either in ERC20 tokens or ETH) before allowing them to set their participation status to true.
Current implementation:
Attack scenario:
An attacker can call changeParticipationStatus() before the deadline
They become a participant without any financial commitment
They can potentially become the host through changeHost() since the only requirement is being a participant
As a host, they could then:
Withdraw all funds using the withdraw() function
Manipulate the event planning
Prevent legitimate participants from getting refunds by changing the host
Add balance checks before allowing participation status changes:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.