DEV Community

Cover image for How a Missing `assert!` Drained $3.44M From Typus Finance — and Why the Code Looked Correct
mehvetero
mehvetero

Posted on

How a Missing `assert!` Drained $3.44M From Typus Finance — and Why the Code Looked Correct

On October 15, 2025, at 13:05 UTC, an attacker began draining Typus Finance's TLP liquidity pool on the Sui network. Thirty-four minutes later, the contracts were paused — but the pool was already empty. Over the hours that followed, the stolen SUI, xBTC, and suiETH were swapped to USDC on-chain, then bridged to Ethereum via Circle's CCTP in 14 transactions. Total loss: $3.44 million.

The root cause was a single line of Move code that looked like an authorization check — called the right function, passed the right arguments, sat in the right place — but silently discarded its result. The oracle module had been live for eleven months.

I pulled the vulnerable source from GitHub, compared it against the post-incident rewrite, and traced the attack on-chain. This is what I found.

https://mehvetero.com/

Top comments (0)