RAIDEN GOD Thunder Rug Pull

Reported loss $38K
Rugpull

What happened

RAIDEN GOD Thunder (RAIDEN) was deployed on Ethereum on 29 July 2023 at 0x13e9E616…c66bC9 by 0x4Dcf852C…d6DF0C. Its Ownable constructor sets the owner to the zero address, so the token looks ownerless from the start, but the real control sits with a hidden address passed in the constructor as token_ (0x0Db52F49…F7b10F). That address can mark any holder so that every transfer out of their wallet reverts, and anyone can call the misleadingly named increaseAllowance to credit that hidden address with any amount of RAIDEN without changing the total supply.

Separately, about 15 hours after deployment the deployer withdrew its Uniswap V3 position, receiving 50.98 WETH and about 93.93 billion RAIDEN in one transaction. Cyvers flagged the withdrawal and reported that 54 ETH went to Tornado Cash through 0xEBada7c9…247DD5; the live record puts the scammer's profit at 20.44 ETH, about 37,977 USD.

How it happened

  1. The Ownable constructor calls _setOwner(address(0)), so owner() returns the zero address from deployment and the token appears renounced. The contract has no onlyOwner functions that matter; its control is keyed to _descri.addr, which the constructor sets from the token_ argument (0x0Db52F49…F7b10F).
  2. Approve(address _spender, uint256 _amount) (capital A, separate from the standard approve) only takes effect when the caller is _descri.addr. With a non-zero amount it sets _dex[_spender] = _spender, which marks that holder.
  3. Every transfer and transferFrom first calls _cheBalan(sender, ...). For a marked sender it sets num = _totalSup and calls _decre(_from, num), which subtracts the whole total supply from the sender's balance under Solidity 0.8 checked arithmetic. That underflows and reverts, so a marked holder can no longer sell or move tokens. The check is on the sender, so it blocks the holder whether the transfer is sent directly or pulled by the router.
  4. increaseAllowance(address spender, uint256 allowAmount, bool hasApproved) does not touch allowances. When spender is _descri.addr, it sets amount = _total(0, allowAmount) and runs _balances[spender] += amount, crediting the hidden address with any amount of RAIDEN while _totalSup stays unchanged. Those tokens could be sold into the pool.
  5. What the record documents on-chain is a liquidity withdrawal: on 29 July 2023 at 16:25:47 UTC the deployer called multicall on the Uniswap V3 Positions NFT contract and received 50.98 WETH and about 93.93 billion RAIDEN (0x1f2759b0…a38b45). Cyvers reported that 54 ETH was then deposited to Tornado Cash via 0xEBada7c9…247DD5; the live record cites 0xc1105a94…239f8a as the Tornado Cash transfer.

Protocol details

Classification Token
Protocol Type Exit Scam/Rugpull
Affected asset / contract RAIDEN

Build your security review skills

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