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.