The withdraw function does not remove the amount from the token balance mapping. This allows anyone with a minute balance to spam withdraw to drain the entire contract balance.
The amount is transferred but the balance mapping is not updated.
Anyone with any balance of Token X can drain the entire contract balance of said token.
Manual Review
Reduce the users balance with the amount withdrawn.
Valid critical severity finding, the lack of clearance of the `userTokenBalanceMap` mapping allows complete draining of the CapitalPool contract. Note: This would require the approval issues highlighted in other issues to be fixed first (i.e. wrong approval address within `_transfer` and lack of approvals within `_safe_transfer_from` during ERC20 withdrawals)
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.