The cause of this exploit is that address account variable in MoneyShelf::depositUSDC is not necessarily the msg.sender, making it possible for an exploiter to be able to access the account of other users in a situation where there is enough approval. Further implication of this is that the exploiter is able to mint CrimeMoneyusingUSDC` balance which is not his.
Manual Review
Instead of using account in usdc.transferFrom(account, address(this), amount); use msg.sender. Also include a require check to help ensure that the account is the msg.sender and an additional system to track and update its balance. Neceesrary required checks should also be added in the withdraw function also.
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.