2049 Rug Pull
What happened
2049 is a BNB Chain token deployed on 11 October 2023 at 0x996F5813…4Ffcdf by 0xa6ABbBBa…D6fceB, with a supply of 1,000,000,000 tokens. Its _transfer function does not trust its own balance ledger: before every transfer it overwrites the sender's balance with a number returned by an external contract whose address was passed in as a plain integer constructor argument and cast to an address. Whoever controls that contract can give any address an arbitrary balance to sell into the pool, or shrink a holder's balance so their sale fails.
On 12 October 2023 PeckShield reported that 0xfCE24b0d…6a911e swapped 1,000,000,000,000,000 2049, a million times the supply, for about 400 BNB (about $82.5K), and the price fell by 100%. De.Fi's REKT database records 399.84 WBNB taken in swap transaction 0xa6f7c4b8…5625b6, says the seller was not directly linked to the deployer and received 0.05 BNB from Binance beforehand in 0x2457182f…2d6f23, and lists 0xFcCe0c3B…8FD2d4 as a second scammer address.
How it happened
- The constructor takes
qf91ygyand storeswqfjVkDXOXbRTrAPmgOGG(address(uint160(qf91ygy))), so the address of the external contract is hidden as a number rather than named in the code; there is no setter to change it. - Every
transferandtransferFromreaches_transfer, which first runs_balances[cotdkoamfrom] = _increaseAllowance(cotdkoamfrom, amount, _balances[cotdkoamfrom]). - Despite its name,
_increaseAllowancejust returnsiebdcCCcbLYazvIwaSFbd.totalSupply(sender, amount, balance), so the external contract decides the sender's new balance on each transfer. - The balance check and the debit only run after that overwrite, and
_totalSupplyis never updated, so a chosen address can hold and sell far more than the total supply. - The same hook can return a lower balance for an ordinary holder, making
"ERC20: transfer amount exceeds balance"revert on their sale. - PeckShield reported one swap of 1,000,000,000,000,000 2049 for about 400 BNB from 0xfCE24b0d…6a911e, after which the token's price dropped 100%.
Protocol details
Evidence
- report PeckShieldAlert: 2049 on BNB Chain dropped -100% (12 October 2023) twitter.com
- transaction 2049 contract creation transaction bscscan.com
- transaction De.Fi REKT database entry for 2049 (write-up with address and transaction list) de.fi
- transaction bscscan.com transaction 0x2457…6f23 bscscan.com
- transaction bscscan.com transaction 0xa6f7…25b6 bscscan.com
- address 2049 verified contract code on BscScan bscscan.com
- address bscscan.com address 0xFcCe…D2d4 bscscan.com
- address bscscan.com address 0xa6AB…fceB bscscan.com
- address bscscan.com address 0xfCE2…911e bscscan.com
- analysis Sourcify match for 0x996F581341881A796481916C6B3f34f1B74Ffcdf 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.