Function ThePredicter::makePrediction() does not prevent non-registered and non-approved players from calling it.
Function makePrediction() does not check if the caller is a registered and approved player. This means that anyone can participate in the competition that was supposed to be available for 30 players only.
This issue can be weaponised to DOS the system by calling makePrediction() from as many addresses as possible such that function ThePredicter::withdraw() becomes too expensive to call or even cannot be completed due to out of gas.
Additionally, the non-registered and non-approved players will be eligible for shares of entrance fee they did not pay. If entrance fee is substantially higher than prediction fee, then there is a potential profit if they are able to get positive scores.
Denial of service on function ThePredicter::withdraw()
Testing, manual review
Add checks on function ThePredicter::makePrediction() such that it is callable only by registered and approved players.
The issue can be demonstrated using the following test:
makePrediction has no access controls and any unapproved user can make predictions causing an incorrect calculation and distribution of rewards.
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.