The withdraw() function sends the entire contract balance to any address via transfer().
While transfer() is currently safe, switching to call() or future changes could introduce a reentrancy vector.
Likelihood:
Future refactoring may change to .call{value:…} to avoid gas stipend issues.
Attackers could then reenter via fallback
Impact:
Draining of contract funds.
Corrupted contract state through reentrant calls.
The attacker could reenter the FestivalPass contract by calling it's withdraw function using a fallback mechanism on a malicious contract.
The nonReentrant modifier should be used for the withdraw function to prevent this kind of attack.
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.