Time Hack
What happened
On December 6, 2023 (UTC), the TIME token on Ethereum was exploited for about 89.5 ETH (roughly $188,000) through the ERC-2771 and Multicall address-spoofing bug that thirdweb had warned about days earlier.
TIME was a thirdweb pre-built token contract that combined ERC-2771 meta-transactions with a multicall function. Under ERC-2771, a trusted Forwarder appends the verified signer's address to the end of the calldata, and the token reads the sender from those last 20 bytes. multicall then delegatecalls each sub-call with only the bytes the caller supplied, so the appended address is dropped and each sub-call's own final bytes are read as the sender instead. By crafting those bytes, the attacker made the token treat the Uniswap pair as the caller and burned almost all of the pair's TIME.
Thirdweb had disclosed the issue internally on November 20 and published an advisory on December 4, 2023, according to Beosin, but the TIME contract had not been mitigated. The attacker spent 5 WETH, burned about 62.2 billion TIME from the pool, forced a reserve update and sold back for about 94.5 WETH. CertiK puts the net profit at 84.6 ETH after a 4.9 ETH payment to the block builder.
**Block data**
- Exploit tx:
0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6 - Sender:
0xfde0d1575ed8e06fbf36256bcdfa1f359281455a - Attack contract:
0x6980a47bee930a4584b09ee79ebe46484fbdbdd0 - TIME token:
0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29
How it happened
- The attacker swapped 5 WETH for about 3.46 billion TIME in the TIME/WETH Uniswap V2 pool.
- They called
execute()on the trustedForwarderwith a signed request whose data targeted TIME'smulticall(). - Inside
multicall, the sub-call toburn()was built so that its trailing bytes held the pair's address. Becausedelegatecallpassed only those bytes, ERC-2771's_msgSender()returned the pair instead of the real signer. burn()therefore destroyed about 62.2 billion TIME held by the pair, and async()updated the reserves, leaving the pool with almost no TIME against its WETH.- The attacker sold their TIME back into the pool for about 94.5 WETH, for a net gain of about 89.5 ETH before the builder payment.
Protocol details
Evidence
- report Report neptunemutual.com
- transaction Etherscan transaction 0xecdd111a...f6b6 etherscan.io
- address etherscan.io address 0x6980…bdd0 etherscan.io
- address etherscan.io address 0xfde0…455a etherscan.io
- analysis DeFiLlama defillama.com
- analysis Time Token Exploit certik.com
- analysis Unveiling the Ethereum TIME Contract Hack: Exploiting ERC2771 Protocol Vulnerabilities for Profit beosin.com
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.