DubaiCEO Rug Pull
What happened
DubaiCEO was an ERC-20 token on Ethereum at 0x4876c589…0feb8e, deployed on 27 June 2023 by 0xEE8f6c22…a4Ac48. Its code hard-codes that address as _ownr, a second owner that renounceownership never clears, and lets it credit any address through refund with 780000000000000000000000000000000000 raw units, which at the token's 9 decimals is 7.8e26 tokens against a 2.5 billion total supply, without touching totalSupply. It also gates transfer, which the pool uses to deliver bought tokens, behind a trading switch only _ownr can turn on, and lets the owner cut any holder's balance to zero or one unit with burnFromAddresses.
On 2 July 2023 the deployer sold DubaiCEO into the Uniswap pool. De.Fi's REKT database lists four sale transactions for about 124 ETH, after which the ETH was sent on to two addresses as 70 and 54 ETH, for a total loss of 237,272 USD.
How it happened
- The constructor gives the whole supply to the deployer and stores
_ownr = 0xEE8f6c2259Fa993b6809A74B82DA9c9FB4a4Ac48.renounceownershiponly moves_ownerto the dead address;_ownrhas no setter, so its powers cannot be given up. refund(address recipient)passesSafeCalls.checkCaller(_msgSender(), _ownr)and then runs_balances[recipient] += refundAmountwithbaseRefundAmount = 780000000000000000000000000000000000, which is 7.8e26 whole tokens at 9 decimals._totalSupplyis not changed, so explorers still show the 2.5 billion supply.transferrequires_isTradeEnabled || _msgSender() == owner(). When a buyer swaps, the pair callstransfer, so buys fail until_ownrcallsenableTrading().transferFrom, which the router uses for sells, has no such check, and there is no function to switch trading off again.burnFromAddresses(accounts, amount)isonlyowner. It requires each balance to be at mostamountand then runs_balances[accounts[i]] /= amount, which leaves 0 or 1 unit, while emitting aTransferevent foramountto the dead address.- What happened: on 2 July 2023 the deployer sold DubaiCEO through the Uniswap Universal Router. The first sale, 0x66873bf7…b77877, swapped 57,384,905.53 DubaiCEO for 50.638 WETH. De.Fi's listing names three more liquidity drain transactions, 0x05a0e88c…366c0e, 0xfc989ff4…732948 and 0x04ba9ffc…9ed559, for about 124 ETH in total (123.638 ETH in De.Fi's alert).
- Per De.Fi, the ETH was then sent to two addresses as 70 and 54 ETH in 0xce061f62…60ed5d and 0x82f38ce2…a39a02.
Protocol details
Evidence
- report De.Fi Antivirus Web3: $DubaiCEO Token Rug Pull twitter.com
- transaction Etherscan transaction 0x66873bf7...7877 (deployer sale via Universal Router) etherscan.io
- transaction etherscan.io transaction 0x04ba…d559 etherscan.io
- transaction etherscan.io transaction 0x05a0…6c0e etherscan.io
- transaction etherscan.io transaction 0x82f3…9a02 etherscan.io
- transaction etherscan.io transaction 0xce06…ed5d etherscan.io
- transaction etherscan.io transaction 0xfc98…2948 etherscan.io
- address DubaiCEO verified contract code on Etherscan etherscan.io
- address etherscan.io address 0xEE8f…Ac48 etherscan.io
- analysis Sourcify match for 0x4876c5892d975780405f1b73802221b2850feb8e on Ethereum repo.sourcify.dev
- analysis De.Fi REKT database entry for DubaiCEO (write-up with block data references) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.