anticsdecoded|Portfolio
SEC|2026
$ cat utix-eoa-guard-locks-451-eth.md
writeup2026-03-20·5 min

A crowdsale that can never pay out — a critical on Immunefi

#solidity#evm#access-control#immunefi

##The setup

Utix's deployed MintedTokenCappedCrowdsaleExtv1 custodies raised ETH and pays it out to a configured multisig. At the time of review it held 451.32137 ETH.

##The lock

The withdrawal helper guards the payout wallet with an extcodesize == 0 "must be an EOA" check:

solidity
require(extcodesize(multisigWallet) == 0, "not an EOA");

But the configured multisigWallet is a Gnosis Safe — a contract, so extcodesize is non-zero and every withdrawal reverts.

The escape hatch is also broken: setMultisig discards the result of investorCount.plus(1) and reverts, so the wallet can't be repointed to an EOA either. The two defects together permanently freeze the full 451 ETH.

##Takeaway

extcodesize-based "EOA only" checks are an anti-pattern: they break smart-contract wallets (the norm for treasuries), give no real security against contracts (constructor bypass), and — when they gate withdrawals — turn into a self-inflicted, irreversible lock.

▸ full report