Normal Behavior:
During withdrawals, a participant should only be able to redeem tokens proportional to their actual deposited shares (stakedAsset[msg.sender]).
The vault’s payout calculation should be based on the legitimate shares each user obtained through deposits.
Specific Issue:
The withdraw() function incorrectly uses balanceOf(msg.sender) instead of stakedAsset[msg.sender].
Since balanceOf() is based on minted ERC20 shares — not actual deposits — an attacker can artificially inflate their balance through direct token transfers to the vault.
When withdraw() is called, this inflated share balance is used in the reward ratio, allowing the attacker to drain the entire vault.
Likelihood:
Very High — Exploitable by any user with direct ERC-20 access to the vault.
No permission or special setup required.
Impact:
Vault Drained: Attacker can withdraw all funds.
Permanent Fund Loss: Honest users receive nothing.
Systemic Exploit: A single malicious participant can bankrupt the vault.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.