GAME Hack

Reported loss $50K
Reentrancy

What happened

On February 12, 2024, an attacker drained about 20 ETH (roughly $49,600) from the GAME auction contract on Ethereum through a reentrancy bug in its makeBid() function.

makeBid() only required a new bid to exceed newBidEtherMin(), which returned 5% of the standing bid (bidEther * 5 / 100), not the standing bid itself. So a bid far lower than the current one could take the lead. On every new bid, makeBid() sent the full stored bidEther back to the previous highest bidder before updating who led and how much they had bid. The attacker's contract held the top bid, then placed a bid of about 5% of it. When the refund reached the attacker contract, its receive() function called makeBid() again before the state changed, collecting the same stale refund over and over. Part of the stolen ETH was later deposited to the FixedFloat exchange.

Attacker: 0x145766A51ae96E69810fE76f6f68Fd0e95675A0B

Attack contracts: 0x8d4dE2Bc1a566b266bD4B387f62C21e15474D12a, 0x327aa670AABeAaC9B8F099E4827e04e957B66dCd

Attack transactions: 0xe07fa7cf5f590ea82cf195923549722f924857537111aeb3824359d3e1c2e32f, 0x1624cd342758019872713c31965f983a9154cc22c04430164be506bc1a68f6c7, 0x0eb8f8d148508e752d9643ccf49ac4cb0c21cbad346b5bbcf2d06974d31bd5c4

How it happened

  1. The attacker sent 0.6 ETH to an attack contract, which placed a bid of about 49% of that balance through makeBid() and became the highest bidder.
  2. The contract then placed a second bid of newBidEtherMin() + 1 wei. Because of a logic error, this small amount passed the minimum bid check.
  3. The new bid made makeBid() refund the previous highest bidder, the attack contract itself, before updating the stored bid state.
  4. The refund triggered the contract's receive() function, which called makeBid() again with another minimal bid. Each nested call refunded the same stale bid amount.
  5. The loop ran about 110 times in the reproduced exploit. The largest attack transaction returned about 11.16 ETH to the attacker, and several transactions together took about 20 ETH.

Protocol details

Classification Other
Protocol Type Exploit/Reentrancy

Understand the attack patterns

Build your security review skills

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