OBB Token Rug Pull
What happened
OBB is a BEP20 token (contract 0xd23b64db…034c30) traded against USDT on PancakeSwap. Its verified code makes selling the exception rather than the rule: _transfer reverts whenever Legaladdress returns true, and for an ordinary wallet that is not the deployer or the pair it returns true unless an admin has granted that wallet a sell budget with setMdMap. Buying from the pair and anything the deployer address sends pass the check, so the code lets the deployer trade freely while holders are locked in.
CertiK's Skynet alert of 2023-02-09 reported that OBB had dropped 98% and that the deployer removed about $156k of liquidity; De.Fi's REKT database lists the incident as an exit scam/rugpull of 156,063 USD. The live listing says the funds were removed directly from the OBB/USDT pool, sent to another EOA and swapped for other tokens. The listed scammer address is 0xb54f89f5…e9a3fb, which is also the address that deployed the contract, and the liquidity removal transaction is 0x8375829b…70d5d0.
The contract does not control the liquidity itself, and the evidence opened here does not show whether any holder's sell was actually blocked.
How it happened
- At deployment the constructor mints the whole supply to the deployer, records that address as
_caand gives it the admin role:_ca=_msgSender();and_grantRole(DEFAULT_ADMIN_ROLE, _msgSender());. - Buys from the pool are allowed. In
Legaladdressthe pool address_usdtPairis excluded byif(from!=_da && from!=_usdtPair && from!=_ca){, so a transfer from the pair falls through toreturn false;and is not reverted. - Sells are blocked by default. For any other non-contract sender sending to the pair,
uint256 _accc=_mdmap[from];is zero, soif(_accc == 0){returnstrue._transferthen reverts withrequire(Legaladdress(from,to,amount)!=true);. - Wallet-to-wallet transfers are blocked as well: the
elsebranch of theif(to==_usdtPair)test isreturn true;, which reverts the same way. - Only the admin can open an exit.
setMdMap(address user,uint256 amount)isonlyRole(DEFAULT_ADMIN_ROLE)and sets the sell budget,setBotfromandsetPairuse the same role, and the deployer address_cais never checked at all. The code lets the deployer decide who may sell. - What was reported: CertiK recorded a 98% price drop with the deployer removing about $156k of liquidity, and De.Fi's listing gives the removal transaction above. The pool's LP tokens are not held by this contract, so the removal itself is not a function of the token code.
Protocol details
Evidence
- report CertiK Alert tweet on OBB token (2023-02-09) twitter.com
- transaction bscscan.com transaction 0x8375…d5d0 bscscan.com
- address OBB (0xd23b64db...) verified source on BscScan bscscan.com
- address bscscan.com address 0xb54f…a3fb bscscan.com
- analysis Sourcify match for OBB on BNB Chain repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.