LevelTwo::graduate has a reinitializer(2) modifier, which restricts the function to be called only once. It is expected to be called by LevelOne::graduateAndUpgrade through GraduateToLevelTwo.s.sol. However, LevelOne::graduateAndUpgrade does not utilize the (bytes memory)data field for the external call to LevelTwo::graduate. As a result, LevelTwo is not (re)initialized and anyone can call LevelTwo::graduate to (re)initialize it.
LevelOne::graduateAndUpgrade#L295
Impact: Low, students still can graduate if anyone calls LevelTwo::graduate
Likelihood: High, principal will upgrade school system at the end of school session (after 4 weeks)
Severity: Low
Manual review
Make the following modifications
LevelOne::graduateAndUpgrade
The system doesn't implement UUPS properly.
The system doesn't implement UUPS properly.
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.