Function MysteryBox::claimSingleRewarddoes not follow CEI pattern and this allows to re-enter to the function and claim rewards again before the rewards array for the user is deleted.
Function MysteryBox::claimSingleReward deletes a reward from the rewardsOwned array after sending the reward to the user:
This allows to re-enter to the function and claim the rewards again.
An attacker can withdraw all funds from the contract.
Manual review
Change the function to follow CEI pattern as below:
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.