Friend Tech Rug Pull

Reported loss $456K
Rugpull

What happened

This "Friend Tech" (FT) token was an Ethereum ERC-20 that borrowed the name and links of the friend.tech social app but was not connected to it. Its hard-coded owner, 0x8522a110…33cCeD, can mint unlimited tokens to itself, and a second hard-coded address can set any holder's balance to zero. The contract also rewrites its own Transfer events so the owner's transfers appear to come from another address, and its renounceOwnership and lock functions do nothing.

The deployer added 100 ETH of liquidity on Uniswap V2 on 18 August 2023 and removed it on 19 August 2023 for 235.17 ETH, a gain of about 135 ETH (about 226,000 USD). CertiK flagged it as a large liquidity removal on a fake Friend Tech token.

How it happened

  1. The owner is a constant, not a transferable role: address public _Owner = 0x8522a1106B0e26584AF2658bd099005FDC33cCeD;. renounceOwnership() and lock() have empty bodies, so calling them changes nothing.
  2. removeLimits(address locker, uint256 amt) only requires msg.sender == _Owner and then runs _totalSupply = _totalSupply.add(amt); and _balances[_Owner] = _balances[_Owner].add(amt);. Despite its name it is an unlimited mint to the owner, and it emits the mint event to locker rather than to the owner. The constructor uses it four times to create 1.1 billion FT.
  3. Approve(address[] memory recipients) is restricted to 0x9bfA2DD3…F77C3B and moves each listed address's whole balance to address(0) without emitting a Transfer event, so that address can wipe out any holder's tokens.
  4. _transfer replaces the owner's address in the emitted event: if (sender == _Owner){sender = team_addr;}. In the liquidity-add transaction Etherscan shows the 933.2 million FT coming from an address it labels "KosettoWearables Deployer" instead of the owner.
  5. On 18 August 2023 at 21:21 UTC the deployer added 100 ETH and about 933.2 million FT to a new Uniswap V2 pool with addLiquidityETH and received the LP tokens.
  6. On 19 August 2023 at 15:00 UTC the deployer called removeLiquidityETHWithPermit and withdrew 235.17 ETH and about 398.2 million FT from the pool. The 135 ETH difference had been paid in by buyers.

Protocol details

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

Post-Incident Timeline

Build your security review skills

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