JNB Token Rug Pull

Reported loss $106K
Rugpull

What happened

JNB is a BEP20 on BNB Smart Chain whose code gives the owner several ways to trap holders: an unlimited blacklist, an uncapped trade-fee setter and a fee-swap routine that can be made to revert on every sell. A CertiK Skynet alert on February 28, 2023 reported JNB down more than 98% after two EOAs, 0xD05 and 0x024, sold JNB for a total of about 106K USD. De.Fi's REKT database lists the same day as a rugpull by the initial token holders for 106,497 USD, with the two addresses below draining the PancakeSwap pool and the proceeds spread across several EOAs.

The code shows what the owner can do; the sources opened here do not show that any of these controls was used.

(from the De.Fi listing):

How it happened

What the code allows:

  1. Every transfer to or from the pair address pays a fee debited from the sender's balance: uint256 TFee = amount.mul(buyTaxFee).div(100); followed by doTransfer(from, address(this), TFee);. As deployed buyTaxFee is 15 (the source comment says 2%), and it applies to sells as well as buys because the check is if(from == uniswapV2Pair || recipient == uniswapV2Pair).
  2. The owner can set that fee to any uint8 value with setbuyTaxFee; there is no cap. At 100 the whole amount goes to the contract and the recipient of the trade receives 0; above 100 the amount.sub(TFee) step reverts, so trades through the pair fail.
  3. The owner can blacklist any address with addBlackList or setIsBlackList. _transfer requires isBlackList[from] == false and isBlackList[recipient] == false, and transferFrom passes the holder as from, so a blacklisted holder can neither sell through the router nor receive tokens.
  4. Before every transfer to the pair, _transfer calls swapRewardToken(), which computes _balances[address(this)].mul(exchangeFee).div(100). The owner can set exchangeFee above 100 with setexchangeFee; the swap then tries to move more tokens than the contract holds and reverts, which blocks every sell while the contract holds any fee tokens. Buys (from == uniswapV2Pair) do not call it. With exchangeFee at or below 100 the routine sells that share of the collected fee tokens for USDT and sends it to walletTax with a minimum output of 0, and walletTax is owner-settable.
  5. The owner can also pull any token or the BNB held by the contract with rescueToken and rescueBNB.

6. CertiK reported on February 28, 2023 that two EOAs sold JNB for about 106K USD in total and the price fell more than 98%. The sources opened do not show whether the blacklist, fee or exchangeFee controls were used in that event, or the relationship between the two sellers and the deployer 0x06d19456…CeeA64.

Protocol details

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

Build your security review skills

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