Reproduced Exploit

StrongBlock Governance Takeover — Abandoned Governor → Malicious Upgrade → Pool Drain

1. StrongBlock left an on-chain Governor with live upgrade authority, while the STRONG vote token was economically worthless — so majority voting power was cheap. 2. Attacker used governance to call setPendingAdmin on the Governor’s Upgrader, then claimed admin of the Governor proxy. 3. They upgrad…

Aug 2026Ethereumaccess-control3 min read

Loss

~$72K — 32,695.76 STRONG + 383,447.17 STRNGR

Chain

Ethereum

Category

access-control

Date

Aug 2026

Source

Crypto Training

EVM Playground

Source-level debugger — step opcodes and Solidity in sync

evm-hack-analyzer

The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Balances (native / ERC-20 / NFT), Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.

Loading fork state…

Source & credit. Crypto Training original detection and analysis (live Twitter/X security-alert intake — not from DeFiHackLabs). Standalone Foundry PoC, offline anvil_state.json, and full write-up: 2026-08-StrongBlockGovernanceTakeover_exp in the evm-hack-registry mirror.


Vulnerability classes: vuln/access-control/missing-auth · vuln/governance · vuln/logic/incorrect-state-transition


Key info#

Loss~$72K32,695.76 STRONG + 383,447.17 STRNGR
ChainEthereum mainnet
ProtocolStrongBlock (@Strongblock_io)
Attacker EOA0xACBCa357…810c
Governor proxy0xBDDC7Ef8…B8C1
Upgrader0x75C53809…1C61
Drain pool / helper0x53cA51Ba…38Fc
Malicious impl0xf6c7c78f…e285 (forward(address,bytes) gated to attacker)
Drain tx0x3ffa7f6d…0401 (block 25691527, run())
Upgrade tx0x92be5e37…94c6 (block 25691700, Upgrader upgrade)
AlertDefimonAlerts 2026-08-06
Bug classAbandoned on-chain Governor + cheap majority of near-worthless STRONG vote token → admin seizure → malicious proxy upgrade → arbitrary calls / pool drain

TL;DR#

  1. StrongBlock left an on-chain Governor with live upgrade authority, while the STRONG vote token was economically worthless — so majority voting power was cheap.
  2. Attacker used governance to call setPendingAdmin on the Governor’s Upgrader, then claimed admin of the Governor proxy.
  3. They upgraded the proxy to a minimal implementation exposing forward(address,bytes) hard-gated to the attacker EOA (arbitrary-call backdoor under Governor authority).
  4. Separately (and in this PoC’s economic replay), the attacker called run() on a StrongBlock pool helper that transferred ~32.7k STRONG + ~383k STRNGR to the attacker.

Attack walkthrough#

flowchart LR A[Acquire STRONG majority] --> B[Gov: setPendingAdmin on Upgrader] B --> C[Claim Governor proxy admin] C --> D[Upgrade Governor to forward backdoor] A --> E[Call pool.run 0xc0406226] E --> F[STRONG + STRNGR to attacker EOA]

A. Governance / upgrade path (on-chain narrative)#

  1. Acquire majority STRONG voting weight (abandoned protocol economics).
  2. Propose / vote / queue / execute Upgrader admin change toward attacker.
  3. upgrade(GovernorProxy, MaliciousImpl) via Upgrader (0x99a88ec4).
  4. Malicious impl: only forward(address,bytes) for msg.sender == attacker.

B. Economic drain (PoC reproduces this)#

  1. Pre-state (block 25691526): inventory proxy 0x53cA…38Fc (OpenZeppelin AdminUpgradeabilityProxy) holds the STRONG/STRNGR balances.
  2. Implementation 0xE89C…4106 exposes run() (0xc0406226) with hardcoded pool / STRONG / STRNGR / attacker addresses — no access control; recipient is baked into bytecode.
  3. Attacker (or any caller) invokes run() on the proxy → DELEGATECALL → transfers full STRONG + STRNGR balances to the attacker EOA.
  4. Attacker later sells inventory (1inch / Uniswap paths) and continues upgrade cleanup.

PoC scope. The Foundry / EVM Playground PoC replays the economic drain at the pre-drain block. Governance control is already established on-chain by that point; the playground story anchors on the verified proxy + ERC-20 transfers (the drain impl is unverified bytecode-only).


PoC#

BASH
cd 2026-08-StrongBlockGovernanceTakeover_exp
MAINNET_RPC_URL=... forge test --match-test testExploit -vvv

Expected: [PASS] testExploit() with 32695.76 STRONG and 383447.17 STRNGR profit.


References#


Sources & further analysis#

Reproductions & code

Alerts & third-party analyses

These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.