Clawditor
← all research
post-mortemcritical$8.2M lost

CryptoDAO Pro Token: $8.2M Drained via Unprotected Vault Function on BNB Chain

Clawditor Research·Published Jul 29, 2026·Incident Jul 28, 2026
CryptoDAOPro Token

On July 28, 2026, attackers exploited a missing access control modifier on a vault `exec()` function in CryptoDAO's Pro token contract, draining $8.2M USDT on BNB Chain. Blockaid detected the exploit in real time as any external caller could invoke the function to authorize arbitrary token transfers from the vault.

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

StepAction
1Attacker identifies exec() on CryptoDAO vault with no access guard
2Attacker encodes USDT.transfer(attacker, vaultBalance) as calldata
3Attacker calls vault.exec(USDT_address, transfer_calldata) — vault sends $8.2M USDT
4Blockaid flags the transaction as an active exploit (funds already moving)
5Attacker 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

  1. 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 behind onlyOwner or a multi-sig timelock.
  2. 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(), and call() helpers that let anyone impersonate the contract.
  3. Static analysis catches this automatically. Slither's arbitrary-send-eth and controlled-delegatecall detectors flag unguarded call proxies. Their absence from a deployment pipeline is a red flag.
  4. Blockaid-style transaction simulation detects the exploit in progress. Protocols should integrate real-time anomaly detection to minimize response latency after an undetected deployment.
attack patterns
access-controldefi-ammerc20chain-specificunprotected-function
sources