The LevelOne to LevelTwo contract upgrade implementation results in permanent loss of 60% of all collected school fees. The funds remain trapped in the proxy contract due to architectural flaws in the upgrade design and missing withdrawal functionality in the LevelTwo contract.
The vulnerability stems from incomplete funds distribution during the upgrade process combined with the absence of fund management mechanisms in the target contract:
Partial Fund Distribution: In the graduateAndUpgrade() function, only 40% of collected funds (bursary) are distributed:
2.No Withdrawal Mechanism: LevelTwo lacks any functionality to retrieve the remaining funds:
solidity
High Severity: The issue leads to direct and permanent financial loss for the system.
Quantitative Analysis:
With school fees of 1 ETH and 100 students: 60 ETH permanently locked
With school fees of 0.1 ETH and 1000 students: 60 ETH permanently locked
This is classified as high severity because:
The loss is unavoidable with the current implementation
The issue directly contradicts the documented business logic requirement that "remaining 60% should reflect in the bursary after upgrade"
The loss scales linearly with adoption (more students = more lost funds)
No recovery mechanism exists
Manual inspection of both contract implementations
Implement Fund Management in LevelTwo: Add functions to handle funds in the new implementation:
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.