Majin Buu Rug Pull

Reported loss $168K
Rugpull

What happened

Majin Buu (BUU) was an Ethereum meme token at 0xF746d527…fB7C5e, deployed on 31 July 2023 by 0x690F2Be8…91132D. Its code gives a hidden address, set at deployment, two backdoors: anyone calling increaseAllowance with that address as spender adds the amount straight to its balance without changing totalSupply, and that address can call Approve to mark any holder so every transfer from them reverts. The constructor sets the owner to the zero address, so the contract looks renounced while these controls stay active.

The loss itself came from liquidity. De.Fi's REKT database says the deployer added 38 ETH to the pool on 31 July, and on 1 August 2023 the deployer withdrew its Uniswap V3 position, taking 129.87 ETH and 31.7 billion BUU. De.Fi's listing puts the loss at $168,213 and says the funds went first to 0x6d99a6ac…67666f and were then split across several other addresses; De.Fi's alert gave about $237K for the 129 ETH and reported 55 ETH sent to Tornado Cash. The listing also notes the project website had been shut down.

How it happened

  1. The constructor stores its third argument as _array[0].addr and mints the whole supply to the deployer. The Ownable constructor runs _setOwner(address(0)), so owner() is zero from the first block.
  2. increaseAllowance(spender, allowAmount) is public. If _hashe(spender, _array[0].addr) is true, it runs amount = _calc(amount, allowAmount) and _balances[spender] += amount after subtracting amount (still 0) from the caller. The hidden address's balance grows while _totalSup stays the same.
  3. Approve(spender, amount) acts only when the caller is that hidden address: _dex[_spender] = _spender marks the target, and a call with amount 0 unmarks it.
  4. _transfer first calls _requireBalance(sender, ...). For a marked holder, _hashe(_from, _dex[_from]) is true and _desc(_from, _totalSup) subtracts the whole supply from the holder's balance, which underflows and reverts, so that holder cannot sell or move tokens.
  5. What happened: in transaction 0xba394684…becf52 (1 August 2023, 04:25:59 UTC), the deployer called multicall on the Uniswap V3 Positions NFT contract and withdrew 129.873 WETH, unwrapped to ETH, and about 31.7 billion BUU from the pool 0xdF1A71C8…ab1AEC.
  6. According to De.Fi's listing, the funds were then moved to 0x6d99a6ac…67666f and on to several other addresses; De.Fi's alert reported 55 ETH going into Tornado Cash.

Protocol details

Classification Token
Protocol Type Exit Scam/Rugpull
Affected asset / contract BUU
Protocol links Website @MajinBuuuDB

Build your security review skills

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