Root Cause
The vault's whitelist-based access control lacked two critical safeguards: a timelock between approval and activation, and a collateral requirement for whitelisted borrowers. Once an address was added to the whitelist, it could immediately borrow aBaswstETH Aave receipt tokens and redeem them for underlying wstETH without providing any collateral.
The vault is controlled by a 3-of-7 Safe multisig whose signers remain unidentified, and no protocol has publicly claimed ownership of it.
// Pseudocode illustrating the flawed borrow path (reconstructed from analyst reports)
function borrow(address recipient, uint256 amount) external onlyWhitelisted {
// No collateral check enforced
// No timelock: whitelist change effective immediately
aToken.transfer(recipient, amount); // aBaswstETH sent to whitelisted caller
}
// Attacker then redeems via Aave:
// IPool(AAVE_POOL).withdraw(wstETH, amount, attacker);
On October 4, 2026 at 08:52 UTC the Safe removed a freshly deployed contract from its whitelist; exactly 60 seconds later at 08:53 UTC it re-added the same address. Blockaid flagged the drain at 09:21 UTC, by which point roughly $2.02M had already left the vault.
Attack Steps
| Step | Action | Detail |
|---|---|---|
| 1 | Deploy contract | Attacker deploys a fresh, purpose-built contract address |
| 2 | Whitelist maneuver | Safe executes remove → re-add of the contract within 60 seconds (how the Safe was controlled is unconfirmed) |
| 3 | Borrow aBaswstETH | Whitelisted contract borrows 1,783.067 aBaswstETH with no collateral requirement |
| 4 | Redeem via Aave | Aave receipt tokens redeemed 1-for-1 for ~1,783 wstETH |
| 5 | Exit | Attacker moves proceeds; ~$31.7M remains in the vault at time of reporting |
Impact
- Loss:
1,783 wstETH ($6M at time of exploit) - Remaining at risk: ~$31.7M still held in the same vault
- Chain: Base (Coinbase L2)
- Protocol claiming ownership: None — orphaned 3-of-7 Safe multisig with anonymous signers
- Aave core contracts: Not implicated; the flaw is in the vault layer
Lessons for Auditors
- Timelocks are non-optional for privileged role changes. A whitelist add that takes immediate effect gives defenders zero reaction time. Every role or whitelist change on a production vault should enforce a minimum delay (typically 24–48 h); shorter delays should require explicit justification in audit scope.
- Whitelist ≠ collateral exemption. Granting a whitelisted address uncollateralized borrowing concentrates all counterparty risk into the governance key. Audit access-control checks and collateral checks as independent invariants.
- Anonymous multisig signers are a systemic risk. A 3-of-7 Safe with unidentified signers offers no accountability, no signer-independence analysis, and no way to assess key custody practices. Audits should surface this as a finding even when the contract code itself is sound.
- Ownerless vaults delay incident response. The absence of a recognized protocol owner meant no coordinated disclosure, leaving $31.7M in the same vault for days after the exploit.