Mother Rug Pull
What happened
MOTHER is a BEP20 token built from a CoinToken template that gives its owner a minting function with no cap, a blacklist, a whitelist and a greylist that blocks selling. The token's name, symbol and supply are set by initToken after deployment, and the owner is set in the same call. Because Ownable has no renounceOwnership or transferOwnership, the code gives the owner no way to hand the powers over or give them up.
De.Fi's REKT database lists MOTHER as an exit scam / rug pull in which the deployer profited by 733,883 USD, and De.Fi Security's post of 2023-05-16 reports about 734,000 USD stolen in MOTHER tokens and notes that MOTHER and LINDA were deployed with the same smart contract. The existing text states that the deployer minted 2,000,000,000,000 MOTHER and drained the pool over several transactions, moving the proceeds to another address. Addresses from that listing: scammer address 0x6f0fc555…4f74bd, funds holder 0xf5a19d8d…b7b2ae, mint transaction 0x23ad2c25…888e49, draining transaction example 0xeeCfF022…19d841 and liquidity removal transaction 0x85aff054…9b8ff4. The explorer pages could not be opened, so these come from the De.Fi listing only.
How it happened
initTokenassigns the supply and the owner in one call that anyone can make once:balances[tokenOwner] = totalSupply;andowner = tokenOwner;, guarded only bynotInitialized. The contract has norenounceOwnershiportransferOwnership, so the owner stays fixed.- The owner can create unlimited tokens:
function mint(address account, uint256 amount) onlyOwner public { totalSupply = totalSupply.add(amount); balances[account] = balances[account].add(amount); .... There is no cap and no timelock. Minted tokens can be sold into the PancakeSwap pool for its BNB or USDT side, and every other holder is diluted. - A sell block is built into the transfer functions. When
changeAb(true)has been called (onlyOwner),if(msg.sender==LP&&ab&&!tokenWhitelist[_to]){ tokenGreylist[_to] = true; ...}marks every non-whitelisted wallet that receives tokens from the pair, which means every buyer. The pair sends tokens withtransfer, so the check runs on buys. - A greylisted wallet cannot sell. A router sale calls
transferFrom(_from=holder, _to=pair)andtransferFromrequiresrequire(tokenGreylist[_from] == false);, which reverts; a directtransferreverts onrequire(tokenGreylist[msg.sender] == false);. The only escape istokenWhitelist, which bypasses all of these checks when_fromor_tois whitelisted and which only the owner can set withwhiteListAddress. - The owner can also freeze individual holders with
blackListAddress,blackAddressListandgeryListAddress. Blacklisting the router blocks it asmsg.senderintransferFrom, which stops router-based sells for every non-whitelisted wallet. - What happened, per the De.Fi listing and De.Fi Security's post: the deployer minted tokens, sold them into the pool in several transactions, removed liquidity and moved the proceeds to another address, for about 734,000 USD. The code shows that these actions were possible; whether
abwas ever switched on or any wallet was greylisted is not established by an opened transaction.
Protocol details
Evidence
- report @DeDotFiSecurity incident report twitter.com
- report CoinToken (MOTHER) verified source (Sourcify) repo.sourcify.dev
- report De.Fi Security rug pull alert on MOTHER (X, 2023-05-16) twitter.com
- transaction bscscan.com transaction 0x23ad…8e49 bscscan.com
- transaction bscscan.com transaction 0x85af…8ff4 bscscan.com
- transaction bscscan.com transaction 0xeeCf…d841 bscscan.com
- address CoinToken (MOTHER) verified source (BscScan) bscscan.com
- address bscscan.com address 0x6f0f…74bd bscscan.com
- address bscscan.com address 0xf5a1…b2ae bscscan.com
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.