The LevelOne and LevelTwo contracts lack mechanisms to handle or recover ETH sent to them and have no way to recover USDC sent outside of the enrollment process. Any ETH or unintended USDC sent to these contracts becomes permanently trapped with no recovery mechanism.
similar example:-
Issue: Uniswap v1 had no mechanism to handle ERC20 tokens sent directly to its contracts (outside swaps). Tokens like USDC or DAI sent via direct transfers were permanently stuck.
The LevelOne contract has no functions to handle incoming ETH transfers:
Similarly, LevelTwo also lacks ETH handling mechanisms:
Additionally, there's no mechanism to handle or recover USDC tokens that might be directly sent to either contract outside of the normal enrollment flow. The only USDC interaction is through the enroll() function:
If USDC is sent directly via transfer or transferFrom rather than through the enrollment process, those tokens won't be accounted for in the bursary and would remain stuck in the contract.
It leads to permanent loss of any mistakenly sent ETH
It causes unaccounted USDC to be stuck in the contract
The vulnerability exists throughout the contract lifecycle
The issue affects both implementations (LevelOne and LevelTwo)
Manual code review
Add ETH Handling Functions:
** 2.Add Similar Functions to LevelTwo:**
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.