claimFees() forwards the entire ETH balance to owner() via a raw .call. If the owner is a contract that reverts on receiving ETH (no receive/payable fallback, or a reverting one), the sweep always reverts and the collected fees become permanently trapped, since there is no pull-based alternative.
(src/MerkleAirdrop.sol:42-47)
Likelihood: Low
It requires the owner to be (or to become, via ownership transfer) a contract that cannot accept ETH. With an EOA owner this never triggers.
Impact: Low
If it does occur, all accumulated FEE proceeds are locked in the contract with no way to withdraw them, since the only withdrawal path always reverts. The amounts are small (1 gwei per claim), bounding the loss.
Transfer ownership to a contract with no payable receiver, then claimFees() reverts and the fees cannot be withdrawn.
Use a pull-payment pattern, or let the owner specify an arbitrary fee recipient address.
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.