withdraw uses transfer() which is limited to 2300 gas and will fail if the target is a contract with a receive() function that costs more than 2300 gas.
In FestivalPass.sol:149:
transfer() forwards only 2300 gas. If target is a multisig wallet, proxy contract, or any contract whose receive() exceeds 2300 gas, the withdrawal permanently fails. All ETH from pass sales becomes stuck in the contract.
MEDIUM — ETH from pass sales can become permanently locked if the owner specifies a contract address as the withdrawal target.
Use call instead of transfer:
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.