Big Chungus Honeypot

Reported loss Not disclosed
Ethereum
Honeypot

What happened

Big Chungus (CHUNGUS) was an Ethereum token whose transfers all pass through a modifier named burnTokenCheck that decides who may move tokens. The owner, one address stored as _safeOwner (the first recipient of the owner's tokens, which is the Uniswap pool when liquidity is added) and a whitelist can transfer freely, so buys from the pool succeed. Every other holder can only move tokens below an owner-set _sellAmount, which starts at zero, and a holder who sells even that small amount into the pool is added to a blacklist.

The owner also controls the whitelist and blacklist through misleadingly named functions and can mint unlimited new tokens to itself through a public _mint. A comment claiming "LIQUIDITY LOCKED FOR 6 MONTHS" is backed only by unused constants, not a lock. De.Fi's REKT database lists Big Chungus as an exit scam / honeypot dated 2021-04-24.

How it happened

  1. The constructor mints the supply to _owner and sets _safeOwner = owner;.
  2. The owner's first outgoing transfer runs if (_owner == _safeOwner && sender == _owner){_safeOwner = recipient;_;}, so the first recipient becomes _safeOwner. When that transfer is the liquidity deposit, the Uniswap pool becomes _safeOwner.
  3. Transfers from _owner or _safeOwner, or to _owner, always pass, so buys (tokens leaving the pool) succeed. Whitelisted senders also pass.
  4. For any other holder, require((sender == _safeOwner)||(recipient == _unirouter), "ERC20: transfer amount exceeds balance") rejects the transfer unless amount < _sellAmount. A sell sends tokens to the pool, not to the hard-coded router address, so it reverts with a misleading balance error. _sellAmount starts at 0, and only the owner can set it, by transferring tokens to itself (if (sender == _owner && sender == recipient){_sellAmount = amount;}).
  5. A holder who does sell an amount below _sellAmount into the pool is blacklisted by if(recipient == _safeOwner){_blackAddress[sender] = true; _whiteAddress[sender] = false;}, which blocks further sells.
  6. The owner manages the lists and the pool address through increaseAllowance(address[]) (whitelist), addApprove(address[]) (blacklist) and decreaseAllowance(address safeOwner), and multiTransfer can airdrop tokens to chosen wallets while whitelisting them. _mint is public but requires msg.sender == _owner and credits _balances[_owner], so the owner can mint without limit. No function changes _owner, so none of these powers can be given up.
  7. With other holders unable to sell, the owner and whitelisted wallets can sell into the pool or remove its liquidity. The sources reviewed do not show whether or when that happened.

Protocol details

Classification Token
Protocol Type Exit Scam/Honeypot
Affected asset / contract CHUNGUS

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.