OAK — OnChain Attack Knowledge

Worked example · 2026-08

BounceBit — an inherited Evmos authorisation flaw let a caller name any account as the source of funds, and the chain was retired rather than patched — BounceBit Chain — 2026-08-19

Loss
286,543,148 BB (~$3.3M at the time), moved across 14 transactions over 4 hours 52 minutes beginning 21:02 UTC. BounceBit stated that no private key was compromised, no signature was forged, and no wallet, hardware device, or exchange account was breached — the defect was at the protocol level. The chain's response was terminal: BounceBit permanently retired its standalone Layer 1 and reissued BB as a BEP-20 token on BNB Chain from a pre-attack snapshot, cancelling the unauthorised transfers rather than pursuing them.
OAK Techniques observed
OAK-T9.007 (Fork-Substrate Vulnerability Not Mitigated — primary, confirmed mechanism. The authorisation flaw was in the Evmos technology stack BounceBit Chain was built on, not in BounceBit's own application code. See techniques/T9.007-fork-substrate-vulnerability-not-mitigated.md). OAK-T9.004 (Access-Control Misconfiguration — the flaw's shape: a caller could name an arbitrary account as the source of funds and the stack never checked that the named account had approved the transfer. See techniques/T9.004-access-control-misconfiguration.md).
Attribution
pseudonymous. On-chain identifiers only; no named individual, group, or link to a tracked OAK actor.
Key teaching point
A chain built on a forked stack inherits that stack's authorisation model whole, including the parts nobody on the new team has read. The missing check here is elementary — confirm that the account being debited actually approved the debit — and it was not BounceBit's code. Teams adopting an execution stack audit their modules and treat the substrate as infrastructure, which is exactly the assumption the T9.007 class punishes. The second lesson is in the response: BounceBit concluded that patching a chain nobody else validates is worth less than retiring it, and migrated to BNB Chain with a pre-attack snapshot. That is a rational call for a small sovereign L1, and it is worth naming as a legitimate remediation option — but it also means the chain's users traded a protocol-level flaw for full dependence on another chain's security and governance.

Summary

BounceBit Chain was a standalone Layer 1 built on the Evmos technology stack. On 2026-08-19 at 21:02 UTC an attacker began issuing transfers that the chain accepted without authorisation. The flaw was an authorisation gap inherited from the Evmos stack: a caller could specify an arbitrary account as the source of funds, and the stack did not verify that this account had approved the transfer. No key material, signature, or credential was involved.

Over 4 hours and 52 minutes and 14 transactions, 286,543,148 BB — roughly $3.3M — was moved. BounceBit was explicit in ruling out the usual causes: no compromised private key, no forged signature, no breached wallet, hardware device, or exchange account.

Rather than patch and continue, BounceBit announced it would permanently shut down the Layer 1 and migrate to BNB Chain, reissuing BB as a BEP-20 token using a pre-attack snapshot that voids every unauthorised transfer. The project is backed by YZi Labs.

Timeline (UTC)

When Event OAK ref
(standing) BounceBit Chain runs on the Evmos stack, inheriting an authorisation path that does not verify the named source account approved a transfer T9.007 standing surface
2026-08-19 21:02 First unauthorised transfer; attacker names accounts as funding sources without their approval T9.004 exploitation
2026-08-19 21:02 → 2026-08-20 01:54 14 transactions over 4h 52m move 286,543,148 BB (~$3.3M) T9.004 extraction
2026-08-21 BounceBit confirms the protocol-level cause and rules out key compromise, forged signatures, and account breaches (disclosure)
2026-08-21 Decision announced: retire the L1 permanently, migrate to BNB Chain, reissue BB as BEP-20 from a pre-attack snapshot (remediation by retirement)

What defenders observed

  • The vulnerable code was never reviewed by the team that shipped it. An adopted execution stack arrives with an authorisation model that the adopting team inherits in full. Audit scopes that cover "our modules" and treat the substrate as infrastructure leave the largest and least-understood attack surface unexamined (OAK-M16).
  • A 4-hour-52-minute extraction window on a sovereign L1 is a governance signal, not just a monitoring one. Fourteen transactions across nearly five hours is ample time to halt a chain whose validator set is small enough to coordinate. The extraction ran to completion, which says the chain had no rehearsed halt procedure — the control that matters most for a small L1 and the one most often absent (OAK-M34).
  • Ruling out key compromise publicly, and early, was the right disclosure move. It directed users away from the reflex response (rotate keys, revoke approvals) toward the actual one (wait for the snapshot), and it is a materially more useful disclosure than most in the corpus.
  • Retirement as remediation is a real option with a real price. The snapshot voided the theft entirely, which no patch could have done — the attacker's realised gain went to zero. In exchange, BB holders now depend on BNB Chain's security and governance rather than their own. For a chain whose validator set could not stop a five-hour drain, that trade is defensible; the corpus should record it as an outcome class rather than an anomaly.
  • Sovereignty was the liability, not the asset. Every property that made BounceBit a standalone L1 — its own validator set, its own upgrade path, its own inherited stack — is what produced both the vulnerability and the inability to stop its exploitation in real time.

Public references

Discussion

T9.007 exists for cases where a project inherits a vulnerability from the substrate it forked or adopted, and the corpus's anchors are mostly EVM contract forks — copied code with a known bug that the copier never tracked. BounceBit moves the class up a layer: the inherited substrate is an entire execution stack, and the inherited defect is in its authorisation model. That is a much larger and much less legible surface than a forked contract, and the adoption decision that created it was an infrastructure choice made long before any of the value existed.

The more unusual contribution is the response. OAK's remediation vocabulary is built around patch, pause, recover, and reimburse. BounceBit chose none of them: it ended the chain. Reissuing from a pre-attack snapshot on someone else's chain nullified the theft completely — a better user outcome than most incidents at this size achieve — while permanently surrendering the sovereignty that caused the problem. It is worth recording without either admiration or criticism: for a small L1 that could not halt a five-hour drain, the honest assessment is that running its own chain was providing cost rather than security, and the incident merely made that visible.

For contributors, the reusable question is narrow and answerable in advance: when a project adopts an execution stack, who is responsible for reviewing that stack's authorisation paths, and has anyone done it? In this case the answer was nobody, and the answer was available before the incident rather than after it.

Techniques demonstrated (2)