withdraw sends ETH with .transfer(), which forwards only 2300 gas. Since EIP-1884 (Istanbul hard fork), SLOAD costs 800 gas, making the 2300 stipend insufficient for smart contract wallets like Gnosis Safe that execute logic in their receive() function. If the owner sets a multisig as the target, all withdrawal attempts revert and ETH from pass sales is stuck in the contract.
Gnosis Safe's receive() fallback hits a DELEGATECALL to its fallback handler, which consumes well over 2300 gas. The same applies to other multisig wallets and smart contract wallets (e.g., Argent, Sequence). The withdrawal silently reverts with no error message, and since there is no alternative withdrawal path, the ETH remains locked until the owner calls withdraw with an EOA target.
Likelihood:
Requires the owner to pass a smart contract wallet address as target. Many DAOs and protocol teams use multisigs as their treasury address, making this a realistic scenario.
Impact:
ETH from pass sales is temporarily stuck. The owner can work around this by calling withdraw with an EOA address, so funds are not permanently lost. But it creates operational friction and confusion.
The test deploys a contract with a receive() function that costs more than 2300 gas, then shows that withdraw to that address reverts.
Output:
Replace .transfer() with a low-level call:
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.