Popeye the Sailor Rug Pull
What happened
Popeye the Sailor (POPEYE) is an Ethereum token deployed on 22 July 2023 at 0x0f5dd8d6…e2fd93 by 0x436e7d83…da8016. Its Ownable constructor sets the owner to the zero address, so the token looks renounced from the start, while real control sits with a hidden address stored in _info.tokenAddr at deployment. That address can call Approve (capital A) to flag any holder, after which every transfer or transferFrom out of that holder's balance reverts, and anyone can call addLiquidity to credit that address with any amount of POPEYE without changing the reported total supply.
On 23 July 2023 the deployer removed 129.31 WETH and 9.29 billion POPEYE from the token's Uniswap V3 position; Cyvers flagged the removal (about $241,000) and said the funds moved on to other addresses.
How it happened
Ownable's constructor runs_setOwner(address(0));, soowner()returns zero from deployment. The Popeye constructor stores a separate address,_info.tokenAddr = token_;, taken from a deployment argument.Approve(address spender, uint256 amount)calls_richiedereAllo, which, only when the caller is_info.tokenAddr, sets_dex[spender] = spenderfor a non-zero amount (or clears it for zero).- Every
transferandtransferFromfirst calls_assezBalan(sender, ...). For a flaggedsender, it runsamount = _totalSupply; _meno(sender, amount);, subtracting the whole supply from the holder's balance, which underflows and reverts under Solidity 0.8. The check is on the token holder (sender), so a flagged holder cannot sell or move tokens at all. addLiquidity(address spender, uint256 amount)has no access control. Whenspenderequals_info.tokenAddr, it runs_balances[spender] += total;withtotalequal toamount, while_meno(from, total)subtracts zero from the caller. This credits the hidden address with unlimited new tokens and leaves_totalSupplyunchanged.- On 23 July 2023 at 04:03:47 UTC the deployer used the Uniswap V3 position manager to withdraw 129.31 WETH and 9.29 billion POPEYE from the pool (0xcf1eab70…855232), receiving 129.31 ETH. Cyvers reported the funds were sent on through 0x31a74c0e…9b4a9c.
Protocol details
Evidence
- report @CyversAlerts incident report twitter.com
- report Cyvers Alerts post on $POPEYE liquidity removal, 23 July 2023 twitter.com
- transaction Etherscan transaction 0xcf1eab70...5232 (Uniswap V3 multicall liquidity removal) etherscan.io
- address Popeye the Sailor (POPEYE) verified contract code on Etherscan etherscan.io
- address etherscan.io address 0x436e…8016 etherscan.io
- analysis Sourcify match for 0x0f5dd8d652b3910feebf6dae75df794a35e2fd93 on Ethereum repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.