Reentrancy via cross-function callback drains the vault
Vault.sol:184 — withdraw()
External low-level call{value:} returns control to the attacker before balances[msg.sender] is decremented, allowing recursive drain via the attacker's fallback(). The cross-correlate step lifted this from High to Critical when the read-only balanceOf() path on the same storage slot was confirmed.