Seneca Chamber Approval Drain
$6.4M drained from Seneca users via unlimited approvals to its Chamber contract, which had no pause function. Attacker returned 80% for a 20% bounty.
- Date
- Victim
- Seneca Protocol users
- Status
- Partially Recovered
On February 28, 2024, the stablecoin protocol Seneca lost $6.4 million drained from users who had granted unlimited token approvals to the protocol's Chamber contract. The contract had no Pausable function — when the attack was identified, the team had no way to stop it in progress. The attacker returned 80% of the stolen funds for a 20% bug bounty.
What happened
Seneca's Chamber contract was a privileged path that handled token movements on behalf of users who had approved Seneca to spend their tokens. The contract was missing a critical validation: it accepted caller-supplied parameters that determined whose tokens to move and where to send them, without verifying that the operation was authorised by the affected user.
For users who had granted Seneca's Chamber contract unlimited token approvals — the standard pattern for any DeFi protocol that needs to move user tokens routinely — the missing validation meant any caller could:
- Identify a wallet with an active unlimited approval to Seneca.
- Call the Chamber's vulnerable function with the victim's address as the source and the attacker's address as the destination.
- Drain the victim's approved tokens directly.
The attack swept ~$6.4M across multiple victim wallets within a short window.
Compounding the failure: Seneca's contract had never implemented the Pausable pattern — a standard OpenZeppelin primitive that lets a protocol's admin pause specific functions or the entire contract in case of emergency. When the team became aware of the ongoing exploit, they had no way to stop it. The drain continued for the full duration the attacker chose to operate.
Aftermath
- Seneca publicly engaged the attacker offering a 20% bug bounty for the return of funds.
- On February 29, the attacker returned approximately 1,537 ETH (~$5.3M) to a Seneca-controlled recovery address, keeping 300 ETH (~$1M) as the bounty.
- Seneca paused operations — by recommending users revoke all approvals to the Chamber contract, since the protocol itself could not be paused.
- The team shipped a redesigned protocol with proper Pausable controls and parameter validation; broader trust recovery was uneven.
Why it matters
Seneca's incident is the textbook example of why emergency-pause functions are not optional for any protocol holding user approvals. The Pausable pattern is:
- Documented in OpenZeppelin's standard contracts library.
- Available as a one-line modifier that protects any function.
- Trivial to implement at deployment time.
Yet it had been omitted from Seneca's contract — most likely as a deliberate design choice to maximise "decentralisation" by removing administrative control points. The cost of this decision was that the team became spectators during an active drain of their users' funds.
The structural lessons:
-
Decentralisation as design rationale for skipping safety controls is a recurring pattern that produces recurring losses. The trade-off — "no admin pause" vs "users absorb the full impact of every bug" — is rarely framed this clearly to users at deposit time.
-
Approval-based protocols inherit the responsibility to be safely pausable because every user who approved them is exposed to every future bug. The standard for these protocols should be higher, not lower, than for protocols with bounded exposure.
-
The 80% return is one of several recent cases where attackers have chosen to negotiate rather than launder — likely because on-chain forensics has gotten good enough that fully cashing out a $6M exploit is risky and slow. The attacker's effective bounty of $1M on a $6.4M operation may have been the rational choice.
Modern protocols increasingly ship with Pausable + emergency multi-sig + community-controlled circuit breakers as standard. Seneca's loss is one of several incidents that made these patterns mandatory practice rather than nice-to-haves.
Sources & on-chain evidence
- [01]cyfrin.iohttps://www.cyfrin.io/blog/seneca-attack-hack-analysis-proof-of-concept
- [02]theblock.cohttps://www.theblock.co/post/279761/stablecoin-protocol-seneca-hit-by-6-million-exploit-due-to-smart-contract-flaw
- [03]crypto.newshttps://crypto.news/seneca-protocol-hacker-returns-5-3m-from-the-6-4m-breach/