Cornerchain Rug Pull

Reported loss $51K
Rugpull

What happened

Cornerchain (CNR) is a BNB Smart Chain token built from a generic CoinToken template whose owner can set buy and sell taxes with no ceiling, blacklist any address, and pause all transfers. De.Fi's REKT database lists the project as rug pulled by the NeoFinance team, who made a profit of 196 BNB (De.Fi lists the loss at $51,411). Per the listing, the scammer deployed the token to BSC, minted 10M CNR to their account and created the PancakeSwap pair (transaction 0x76b97203…99a9b1), added liquidity by depositing 300 BNB (transaction 0x2f863764…fb5e8b), and, once people started buying, removed the liquidity for a profit of 196 BNB (transaction 0xb17ce0d9…56ceaf).

The listed scammer address is 0x8f0d9acb…2387e4. The liquidity removal is a pair action outside the token code, so the source does not show who held the LP tokens.

How it happened

What the code allows:

  1. The constructor mints the whole supply to the deployer and hands ownership to a constructor argument: _setOwner(_addr[5]); and _mint(msg.sender, initialSupply);.
  2. Taxes are uncapped. function setSellTax(uint256 dev, uint256 marketing, uint256 liquidity, uint256 charity) public onlyOwner stores any values, and setBuyTax does the same. In handleTax, a sale (to == address(uniswapV2Pair)) computes tax += baseUnit * sellTaxes["marketing"]; (and the same for dev, liquidity, charity), moves it with _transfer(from, address(this), tax); and then runs amount -= tax;. The seller is debited the tax plus the remaining amount, so the full amount leaves the seller's balance. At a combined 100% the pair receives zero tokens, and above 100% amount -= tax underflows and the sale reverts under solc 0.8.10.
  3. The owner can blacklist any address with function enableBlacklist(address account) public onlyOwner. _transfer rejects a transfer when any of require(!isBlacklisted(msg.sender), "CoinToken: sender blacklisted");, require(!isBlacklisted(recipient), "CoinToken: recipient blacklisted"); or require(!isBlacklisted(tx.origin), "CoinToken: sender blacklisted"); fails. For a router sale msg.sender is the router, recipient is the pair and tx.origin is the holder's wallet, so listing the holder, the router or the pair blocks sales.
  4. function pause() public onlyOwner sets the pause flag, and require(!paused(), "CoinToken: token transfer while paused"); then rejects every transfer for every holder. renounceOwnership() exists and would end these powers; the chain read shows a non-zero owner, and no source says it was called.

, as listed by De.Fi's REKT database: 5. The listed scammer minted 10M CNR, created the pair, deposited 300 BNB of liquidity and, after buyers arrived, removed the liquidity for a profit of 196 BNB. The listing does not say that any tax, blacklist or pause function was used.

Protocol details

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

Build your security review skills

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