The claimSingleReward() function is subject to a re-entry attack because the state of the variable rewardsOwned is updated after an external call.
This function is vulnerable because an attacker can create a contract with a fallback function that calls claimSingleReward(), thereby the balance funds will be cyclically drained into the attacker's contract.
Low rate of draining the contract balance, because value collect only a single reward.
Manual code review.
Follow the pattern Checks-Effects-Interactions, update the state of variables before external calls:
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.