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.