The contract uses Solidity’s low-level .call{value: prize}("") to transfer ETH to the _winner. While .call is flexible and forwards all gas, it is also potentially dangerous:
It forwards all available gas by default, enabling complex fallback functions on the receiving address.
This opens the door to reentrancy attacks, especially if the call is made before updating contract state (though in this specific function, state changes are done before the call — reducing risk, but still not ideal).
It does not limit or check for malicious fallback functions on _winner.
If a malicious _winner address has a fallback or receive function that makes a recursive external call back into the contract, and if other functions are exploitable, this could lead to reentrancy vulnerabilities.
Even if the function is safe from reentrancy, relying on .call can result in unexpected behavior or gas griefing if the receiver consumes too much gas.
Manual Code review
Use transfer or send.
Recommended Pattern: Check-Effects-Interactions + Pull Payment Model
If you want to keep .call, ensure no external calls are made before internal state is fully updated
Malicious player wins a game using a contract that intentionally reverts when receiving ETH, the entire transaction will fail
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.