Reproduced Exploit
BSC MEV Vault `0xb5cb…` — Authorized Helper Arbitrary Call Drains Venus vTokens
A Venus-integrated MEV / strategy vault (0xb5cb…e1b0) gates sensitive operations (including vToken transfers via selector 0x0243f5a2) behind isAuthorized. Days before the drain, admin called authorize(0xb5cb…4a87) on the vault.
Loss
~$1.1M first tx; campaign ~$2M across follow-ups (TenArmor)
Chain
BNB Chain
Category
access-control
Date
Jun 2025
Source & credit. Exploit reproduction, trace data, and analysis adapted from DeFiHackLabs by SunWeb3Sec — an open registry of reproduced on-chain exploits. Standalone Foundry PoC and full write-up: 2025-06-BSCArbitraryCall0xb5cb_exp in the
evm-hack-registrymirror. Upstream DeFiHackLabs PoC:src/test/…/BSCArbitraryCall0xb5cb_exp.sol.
Vulnerability classes: vuln/access-control/missing-auth · vuln/dependency/unsafe-external-call
Reproduction: isolated Foundry project at this project folder. Verbose run: output.txt. Live attack initcode: sources/attack_initcode.hex.
Key info#
| Loss | ~$1.1M first tx; campaign ~$2M across follow-ups (TenArmor) |
| Vulnerable vault | 0xB5CB0555C0C51e603eaD62C6437dA65372e4E1B0 |
| Authorized helper | 0xB5CB0555c4A333543DbE0b219923C7B3e9D84a87 |
| Attacker EOA | 0xd5c6f3B71bCcEb2eF8332bd8225f5F39E56A122c |
| Attack create | 0xC269cd69CcCB1BBEDB44f93c612905219F424c11 |
| Attack tx | 0x7708aaedf3d408c47b04d62dac6edd2496637be9cb48852000662d22d2131f44 |
| Authorize tx | 0x0c510ce316447e76d5634cc370f13fcf2fb8e5c2519bd63df4ed0ef7378f8e42 (authorize(helper)) |
| Chain / block / date | BSC / 52,052,493 (fork 52,052,492) / ~Jun 25, 2025 |
| Bug class | Privileged vault transfer (0x0243f5a2) callable via an authorized helper with a public entry/fallback — effectively arbitrary call into access-controlled target |
TL;DR#
A Venus-integrated MEV / strategy vault (0xb5cb…e1b0) gates sensitive operations (including vToken transfers via selector 0x0243f5a2) behind isAuthorized. Days before the drain, admin called authorize(0xb5cb…4a87) on the vault.
The helper is not a tightly scoped adapter. Its public surface (fallback / open entry) lets any external caller trigger the vault’s privileged 0x0243f5a2 path, which does:
vToken.transfer(attackerChosenRecipient, amount)
for the vault’s Venus inventory (vUSDT, vUSDC, vETH, vBTC, …).
The live attacker packaged the multi-token drain into a CREATE constructor that, for each vToken:
- Reads
vToken.balanceOf(vault). - Calls the authorized helper.
- Helper → vault
0x0243f5a2(vToken, amount, attacker, …). - Vault transfers the full vToken balance to the attacker.
Pre-attack state (fork 52,052,492)#
| Asset | Vault balance (raw) |
|---|---|
vUSDT 0xfd58…0255 | 1,630,935,807,678,191 |
vUSDC 0xeca8…67c8 | 800,365,645,822,131 |
vETH 0xf508…592c8 | 329,293,631,993 |
vBTC 0x882c…847b | 14,631,336,015 |
isAuthorized(helper) | true |
Attack steps (PoC)#
- Fork BSC at
52052493 - 1. - Confirm
vault.isAuthorized(helper). CREATEthe live attack initcode (constructor arg = helper) — same bytes as tx0x7708…1f44.- Constructor drains all four vToken balances to the attacker EOA.
- Assert vault vUSDT/vUSDC balances are zero.
Follow-up txs (0x8c02…, 0xf902…) continued the campaign (~$2M total per TenArmor).
Fix class#
- Never
authorizea contract with a public arbitrary-call / open fallback. - Privileged transfer functions should only be callable by
msg.sender == owneror a timelocked multisig, not a hot helper. - If a helper is required, whitelist exact calldata (selector + fixed target list) and disable raw
call/ fallback forwarding.
Sources#
- TenArmorAlert
- Follow-up: status/1937743913433071663
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 2025-06-BSCArbitraryCall0xb5cb_exp (evm-hack-registry mirror).
- Upstream DeFiHackLabs PoC:
BSCArbitraryCall0xb5cb_exp.sol. - Attack transaction: view on explorer.
Alerts & third-party analyses
- Original alert / thread: post on X.
- DeFiHackLabs incident explorer: search "BSC MEV Vault
0xb5cb…". - Web3Sec X hacked database: search.
- Rekt leaderboard: search.
- Solodit incident search: search.
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.