Root Cause
The exploit targeted an unprotected exec() function in the CryptoDAO vault contract deployed on BNB Chain. The function lacked any ownership or role-based access control, making it callable by any externally owned account or contract.
// Vulnerable pattern (reconstructed from public reports)
function exec(address target, bytes calldata data) external {
// No onlyOwner, onlyRole, or msg.sender guard
(bool success, ) = target.call(data);
require(success, "exec failed");
}
An attacker who discovers such a function can pass arbitrary target + data to invoke any contract as the vault — including encoding transfer(attacker, amount) on a held ERC-20 — and drain the balance in a single call. Flash loans may have amplified position sizing but were not the root of the vulnerability.
Attack Steps
| Step | Action |
|---|---|
| 1 | Attacker identifies exec() on CryptoDAO vault with no access guard |
| 2 | Attacker encodes USDT.transfer(attacker, vaultBalance) as calldata |
| 3 | Attacker calls vault.exec(USDT_address, transfer_calldata) — vault sends $8.2M USDT |
| 4 | Blockaid flags the transaction as an active exploit (funds already moving) |
| 5 | Attacker begins laundering proceeds; protocol confirms exploit and pauses |
Impact
- Loss: ~$8.2M USDT
- Chain: BNB Chain (BSC)
- Protocol: CryptoDAO / Pro Token
- Date: July 28, 2026
- Confirmed and flagged in real time by Blockaid
- Pro token price collapsed as market confidence evaporated
Lessons for Auditors
- Every state-changing external function needs an access control check. An
exec()/call()proxy function is especially high-risk — if it must exist, gate it behindonlyOwneror a multi-sig timelock. - Arbitrary-call patterns are a top-priority audit target on BSC. The BNB Chain ecosystem has seen repeated variants of this class: unprotected
execute(),multicall(), andcall()helpers that let anyone impersonate the contract. - Static analysis catches this automatically. Slither's
arbitrary-send-ethandcontrolled-delegatecalldetectors flag unguarded call proxies. Their absence from a deployment pipeline is a red flag. - Blockaid-style transaction simulation detects the exploit in progress. Protocols should integrate real-time anomaly detection to minimize response latency after an undetected deployment.