Ore Rug Pull
What happened
This "Ore" (ORE) token on Ethereum shared its name with an unrelated legitimate project and presented itself as an ERC-404 token, but its working code is a plain ERC-20 with hidden owner functions under misleading names. The owner, 0xAD13D88d…C25b5C, can create ORE out of nothing inside the token contract and sell it into the Uniswap pool for almost all of its WETH, can block any holder from transferring, and can cut any holder's balance by an arbitrary factor. On 26 February 2024 the owner called the token contract, which sold 201.08 million ORE (the stated total supply is 25,000 ORE) into the pool for 80.03 WETH, about 243,500 USD, sent to 0x9594f577…A142dB.
PeckShield reported the token dropping 100% and labelled it a rug pull.
How it happened
- The constructor sets
owner = msg.sender;, gives the owner the 25,000 ORE supply and creates the Uniswap V2 ORE/WETH pair. The contract has no function that transfers or renounces ownership. Address(address _r)isonlyOwner. It reads the pair's WETH reserve and targets 99.999% of it:uint256 calling = (Sub(_RR.WETH()) * 99999) / 100000;.- The internal
Allowancehelper asks the router how much ORE that WETH would cost (getAmountsIn) and adds exactly that amount to the token contract's own balance withb[...] += value[0];, where the address isaddress(this)hidden behind_T()._totalSupplyis never increased, so the mint does not show in the supply. getContractthen approves the router for the contract's balance and callsswapTokensForExactTokens, sending the pool's WETH to_r. No LP tokens are needed: the pool is emptied by a sale of newly created tokens.- Two more owner-only functions work against holders.
multicallsetsc[holder] = b[holder] / _p + 10, and_transferthen requiresadd(c[from], b[from]) == 0, which can never hold, so the holder can no longer transfer or sell.multicall2replaces a holder's balance withb[holder] / _pand emits a fakeTransferto the pair to disguise the cut as a sale. - On 26 February 2024 at 09:54 UTC the owner sent a transaction to the token contract with a single address argument, 0x9594f577…A142dB, matching
Address(address _r). The contract sold 201.08 million ORE into the pool and 80.03 WETH went to that address (0xb8f05ade…b184ec).
Protocol details
Evidence
- report PeckShield Alert: Ore $ORE dropped -100% twitter.com
- transaction ORE pool drain transaction etherscan.io
- transaction etherscan.io transaction 0xdc86…e6c2 etherscan.io
- address ORE404 (Ore, ORE) verified source code etherscan.io
- address etherscan.io address address etherscan.io
- address etherscan.io address 0xAD13…5b5C etherscan.io
- analysis Sourcify match for 0x7B6FF2312C22177458b24A441a0b2bF9528DAc57 on Ethereum repo.sourcify.dev
- analysis etherscan.io page 0x068e…0c46 etherscan.io
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.