TL;DR
At 23:47 UTC on July 22, 2026, B² Network disclosed a security incident on its B2 token staking service and described it in one line: "unauthorized access to the staking contract's upgrade authority." 8.59 million B2 left the staking contract on BNB Chain, roughly $3.86 million at the pre-incident price, and the attacker sold the whole position for 5,409 BNB before bridging to Ethereum. The wallet that did it had held the privileged role on that contract since 2025, and the role was revoked only after the tokens were gone. B² suspended staking, pushed unstaking into a manual Discord queue, promised full compensation, and sent the attacker an on-chain offer of legal immunity for returning 10 percent within 24 hours. Lookonchain and the investigator Specter followed the money in public, but neither the attacker addresses nor the transaction hashes have been published, and B² has released no postmortem. An upgrade key is a rewrite key, and a rewrite key is a withdrawal key.
What Did B² Network Actually Lose?
B² Network is a Bitcoin layer 2, built as a modular rollup with an EVM execution layer, and B2 is its gas and staking token. Stakers can lock B2 on the B² chain itself or on BNB Chain. The BNB Chain side is where the money was, and where it left. The BEP-20 lives at 0x783c3f003f172c6ac5ac700218a357d2d66ee2a2, total supply just under 207.5 million.
The disclosure is short and, to its credit, names the failure class instead of hiding behind "a vulnerability." Staking was suspended the same night. Users who wanted out were told to open a Discord request, verified by hand and processed within one business day. B² said the incident was contained and affected users would be made whole.
The date is worth pinning down because reporting split on it. B²'s own post is timestamped 23:47 UTC on July 22. CoinDesk placed it in the early hours of Thursday, July 23, alongside two other drains. Both describe the same window across time zones. We date it to July 22 UTC, because the operator's disclosure is the tightest timestamp available.
B²'s $3.86 million was the smallest of three losses inside roughly six hours, together totaling $35.55 million: the AFX Trade bridge went for $24.15 million on Arbitrum, and the Verus Ethereum bridge for about $7.5 million through the same bug class that had already cost it money two months earlier. We covered the AFX drain in detail here. Two of the three, B² and AFX, came down to a credential that worked exactly as the contract expected.
Which Loss Figure Should You Trust?
The loss has been reported three different ways, and each figure is correct about something different.
$3.86 million is 8.59 million B2 marked at roughly $0.45, the price before the sale started. That is what stakers are owed and what B² has to replace.
The attacker never saw $3.86 million. Selling 8.59 million tokens, about 4.1 percent of the roughly 207.5 million total supply, into BNB Chain liquidity in one go produced 5,409 BNB, roughly $3.01 million. Divide one by the other and the realized average lands near $0.35 a token, which is what CryptoAdventure reported. Metaverse Post prices the same 5,409 BNB at $3.11 million, the identical balance quoted at a different moment.
So roughly $850,000 of the headline figure was slippage, taken by whoever was on the other side of those trades. We use $3.01 million as the realized figure, because it reconciles with both the $0.35 average print and the BNB balance. The $3.86 million stays correct for what B² owes its stakers.
What Is Upgrade Authority, and Why Is It the Entire Attack Surface?
A staking contract that expects to change is usually deployed behind a proxy. The proxy holds the balances and the storage, and forwards every call it receives to a separate implementation contract that holds the logic. ERC-1967 standardizes where those two addresses live: the implementation at slot 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, and the admin, the account allowed to change it, at 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103. Write a new address into the implementation slot and every future call to the same contract runs your code against the existing balances.
That is upgrade authority: permission to replace the logic sitting under a live pot of money without moving the money first.
The consequence is blunt. An account with upgrade authority never has to find a bug in the staking contract. It can write one. A short implementation with a single sweep function will do, and every finding in every audit of yesterday's contract now describes code that no longer executes. MITRE files the class as CWE-266, Incorrect Privilege Assignment: a privilege assigned to an actor in a way that creates an unintended sphere of control.
Two honest limits. B² has not published which upgrade pattern the contract used, and nobody has circulated the proxy address. The team's phrase describes a proxy admin or a functionally equivalent role. Whether the attacker pushed a new implementation or called a privileged function the role already exposed has not been reported by anyone, including B².
The second gap matters more. Nobody has said whether that authority sat on a single externally owned account or a multisig. Reporting describes one wallet holding the role, which points at a single key, and we treat that as likely without asserting it. If it was a multisig, this becomes a failure of signer independence and the controls below still hold.
The Attack, Step by Step
| # | Stage | What happened |
|---|---|---|
| 1 | Grant | Sometime in 2025, the wallet later used in the drain is assigned the privileged role on the B2 staking contract. |
| 2 | Dormancy | The role sits on that wallet for over a year. Investigator Specter later flags this duration as pointing at compromised internal credentials or an inside actor. |
| 3 | Execution | July 22, 2026. The role is exercised and 8,590,000 B2 leave the staking contract. |
| 4 | Liquidation | The attacker sells the position on BNB Chain for 5,409 BNB, about $3.01 million, absorbing roughly $850,000 of slippage. Lookonchain traces the sale. |
| 5 | Bridge | Proceeds move from BNB Chain to Ethereum, swapped into ETH and USDT. |
| 6 | Laundering | Funds go into NEAR Intents and HOT Protocol, routed toward Zcash. |
| 7 | Containment | B² revokes the role, suspends staking, and discloses at 23:47 UTC. |
| 8 | Negotiation | B² sends an on-chain message offering no legal proceedings if at least 10 percent, about $386,000, returns to an official address within 24 hours. |
Note the order of steps 6 and 7. Revocation came after the tokens were sold and bridged, so by the time B² took the role back, the contract it protected was empty.
The exit rail is worth a second look. NEAR Intents is a cross-chain swap layer that, by its operator's own description, moves assets into ZEC from 30-plus chains with no centralized exchange in the path. That removes the checkpoint where a compliance team could freeze anything, a plausible read on why it keeps turning up on 2026 exit paths.
Why Did a Role Granted in 2025 Still Work in 2026?
This is the part worth sitting with.
Blockchain investigator Specter, who traced the laundering route toward Zcash, observed that the privileged role had been active for over a year and raised the possibility of an inside job. Metaverse Post reported the same shape: the wallet had held the role since 2025, revoked only after the transfer.
Three explanations fit, and none has been confirmed. A deployment key was stolen and used opportunistically much later. Someone who legitimately held the role stopped being someone B² would grant it to, and nobody took it back. Or the key was captured through a poisoned deploy pipeline, which is the shape of the Ankr case below.
For law enforcement the distinction is the whole case. For an operator building controls it barely matters. All three end in the same place: an address held the power to rewrite a live contract, and nothing noticed the grant or the twelve-plus months of silence after it.
There was more than one observable moment here. ERC-1967 proxies emit Upgraded when the implementation changes and AdminChanged when the admin does. Role systems emit an event on every grant. Those events fired in 2025 when the privilege was handed out, and again in 2026 when it was used. Neither reached a human who acted.
The gap between the second event and the first token leaving was measured in blocks. Nobody catches that manually. The event you can act on is the grant, sitting there in 2025 with a year of runway before it costs anything. Watching withdrawals is table stakes. Watching privilege changes, and re-checking who holds them on a schedule, is where this was winnable.
Why This Keeps Happening
Ankr is the precedent, and the resemblance is uncomfortable. In December 2022, the aBNBc token on BNB Chain was upgradeable. An attacker with the deployer's private key pointed it at a malicious implementation, minted trillions of aBNBc, drained the pool, and took the price down 99.5 percent, for a loss near $5 million. Ankr later disclosed that a former team member had run a combined social engineering and supply chain attack, planting code that captured the key during a legitimate update. Same chain, same primitive, four years apart.
The default reading of an incident like this is that the team should have bought a better audit. That reading is comfortable and wrong. An audit reads the implementation you hand it, on the day you hand it over. It cannot tell you the admin role is still assigned to a laptop that left the company in 2025. A competent audit would very likely have written up the missing timelock as a finding, and plenty of teams accept that finding, mark it acknowledged, and ship. An accepted finding sits in a PDF, while the role assignment is live state that drifts every time someone rotates a key, changes jobs, or runs a deploy script from a machine they no longer control. Runtime monitoring on privileged-role events tracks the second thing.
The 10 percent offer deserves a look, because it has become the reflex response. Reporting splits on what B² proposed: Metaverse Post reads it as returning at least 10 percent, while Protos files it as a standard 10 percent bounty, the frame it applies to Verus at 25 and AFX at 30. We take the bounty reading, since that is how the other two offers that week worked. Security researcher Taylor Monahan has questioned whether these offers do anything beyond setting a floor on what a theft pays out. B²'s asks someone who already realized roughly $3.01 million and started feeding it into a privacy chain to hand most of it back inside 24 hours, on a promise from the party they just robbed. No return of funds has been confirmed.
What Operators Should Do About Upgrade Authority
-
Inventory every account that can change code or move funds. Read the current on-chain state, never the deployer list from launch day: proxy admins,
DEFAULT_ADMIN_ROLEholders, pausers, minters, upgraders, across every contract live on every chain. Most teams cannot produce this list in a day, which is itself the answer. -
Put a timelock in front of every upgrade path. A 24 or 48 hour delay between "upgrade queued" and "upgrade live" converts an atomic drain into an alert with a response window. Highest-value change in this list, and the one most often deferred to "after the next release."
-
Alert on the grant, not only on the drain. Every
AdminChanged,Upgraded,RoleGranted, and ownership transfer on a fund-holding contract should page someone within a block. These events are close to zero-noise, because a normal month contains none. This is the layer Tripwire exists for, and it would have fired twice here, in 2025 and again in 2026. Our key-compromise runbook covers the first hour after it fires. -
Expire privilege on a schedule. Re-attest every privileged role quarterly and revoke anything nobody can justify by name. On a contract holding user funds, a role unexercised for twelve months is a finding.
-
Move upgrade authority off single keys. A multisig with independently held signers, or better a timelock owned by that multisig, means one stolen key buys nothing. Check that the signers are separate people on separate hardware, since a quorum living in one company's infrastructure is one key wearing several hats.
-
Make the emergency exit automatic. B² halted staking and routed exits through manual Discord verification with a one-business-day turnaround. Reasonable improvisation under pressure, poor control, because it depends on humans being awake precisely when they are least likely to be.
-
Publish the forensics. Compensation restores balances without explaining how the key moved, which is the part another team needs to avoid repeating it.
What happens next comes down to questions nobody can answer yet: whether B² names the compromise vector, whether the 24-hour window produced a single token back, and whether staking returns with a timelock in front of the upgrade path. Only the last changes the odds. The year that role spent sitting unused should bother every team reading this, because most of them have one too.
Frequently Asked Questions
What happened to B2 Network in July 2026? An attacker gained unauthorized access to the upgrade authority on B² Network's B2 staking contract on BNB Chain and removed 8.59 million B2, worth roughly $3.86 million at the pre-incident price. The tokens were sold for 5,409 BNB and bridged to Ethereum. B² disclosed at 23:47 UTC on July 22, 2026.
Was this a smart contract bug? No evidence points that way. B²'s own description is unauthorized access to a privileged role, meaning the contract executed a permitted action requested by an account that held the permission. The failure is in who held the upgrade authority and for how long. Nobody has implicated the staking logic itself.
How much did the attacker actually make? Roughly $3.01 million in BNB. The $3.86 million headline is the pre-sale mark on 8.59 million B2. Dumping about 4.1 percent of the total supply at once dropped the realized average to near $0.35 per token, burning close to $850,000 to slippage.
Are B2 stakers getting their tokens back? B² committed to compensating affected users in full and suspended staking pending a security review. No completed restitution has been publicly documented, and no postmortem has been published.
Would an audit have caught this? An audit could have flagged the missing timelock as a design finding. It could not have known the privileged role was still assigned to a wallet outside the team's control a year later. Key custody and role hygiene are runtime state, and they need runtime controls.
Sources / References
- B² Network incident disclosure, July 22, 2026
- Metaverse Post: B² Network suffers $3.86M exploit, offers attacker legal immunity for partial refund
- CoinDesk: Bitcoin, Ethereum-linked protocols lose $35 million in multiple attacks hours apart
- Protos: DeFi loses $35M in a day, are bounties inviting more hacks?
- CryptoAdventure: B² Network faces $3.86 million token drain as attacker sells 8.59M B2
- CryptoSlate: Two Ethereum bridges lose $31.7M within hours as third protocol halts staking
- KuCoin: three hacks in one day total $35.55M
- BscScan: BSquared Token (B2) BEP-20 contract
- ERC-1967: Proxy Storage Slots
- CWE-266: Incorrect Privilege Assignment
- Cointelegraph: Ankr confirms exploit, asks for immediate trading halt
- Coinspeaker: Ankr reveals former employee behind $5M protocol exploit
- Bybit Learn: What is B² Network?
- SigIntZero: AFX Trade $24.15M bridge exploit
- SigIntZero: Humanity Protocol $36M key compromise runbook



