Snake Eyes Rug Pull
What happened
Snake Eyes (SNAKE) was an Ethereum token traded on Uniswap V3. Its contract contains a hidden per-address block: a justice address fixed at deployment can call a function named Approve (capital A) to give any holder a large weapon value, after which every transfer from that holder reverts, so their tokens cannot be sold. On August 16, 2023 the deployer 0x95c9bB9C…33797f removed its Uniswap V3 liquidity, collecting about 72.1 ETH and 3.63 billion SNAKE; De.Fi's listing puts the loss at $117,292.
According to De.Fi's listing, the funds then moved through several EOAs and about 17 ETH remained at 0x50446734…3b8172 as of August 22, 2023. CertiK reported that an EOA beginning 0xc93A7, which De.Fi's listing gives as 0xc93a7d0f…2a3c72, deposited 60 ETH into Tornado Cash; De.Fi's listing gives 0xafc031a2…2b77d4 as the Tornado Cash transaction.
How it happened
- The constructor stores a privileged address passed as
snake_:_actors.push(Actor(Main(snake_), Villain(3, true)));. This address is separate from theOwnableowner, so renouncing ownership (the on-chain owner is now the zero address) does not remove it. - The public function
Approve(address account, uint256 amount)calls_fight. For any caller other than that address it changes nothing, but for it the branchallowan += amount; _ninja[account].weapon = allowan;writes an arbitraryweaponvalue for any holder. - Every transfer checks
require(amount - _ninja[sender].weapon > 0, "alien");. Under Solidity 0.8 checked arithmetic, aweaponequal to or larger than the amount makes this line revert, so a flagged holder cannot transfer or sell. The check keys onsender, the holder whose tokens move, so it also blocks router sells throughtransferFrom. - Holders who were not flagged could still trade, so buying looked normal while any wallet could be frozen at will.
- On August 16, 2023 the deployer withdrew its liquidity through the Uniswap V3 position manager (tx 0xf7842852…54ecdd), receiving about 72.1 ETH and 3.63 billion SNAKE. De.Fi's listing says the funds then moved through several EOAs; CertiK reported a 60 ETH Tornado Cash deposit from the EOA beginning 0xc93A7, and De.Fi's listing gives 0xafc031a2…2b77d4 as the Tornado Cash transaction.
Protocol details
Evidence
- report @CertiKAlert incident report twitter.com
- report CertiK Alert post on Snake Eyes (SNAKE) Tornado Cash deposit twitter.com
- transaction Etherscan transaction 0xf7842852...754ecdd etherscan.io
- transaction etherscan.io transaction 0xafc0…77d4 etherscan.io
- address Snake Eyes (SNAKE) verified contract source, Etherscan etherscan.io
- address etherscan.io address 0x5044…8172 etherscan.io
- address etherscan.io address 0x95c9…797f etherscan.io
- address etherscan.io address 0xc93a…3c72 etherscan.io
- analysis Sourcify exact match for 0x56d7e6a12f56dfca75fbb3f62b6f647f56f63445 repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.