In LevelTwo.sol, the principal state variable is declared but never properly initialized during the upgrade process:
Although the contract inherits state from LevelOne during an upgrade via the UUPS pattern, the graduate() reinitializer function is empty and doesn't explicitly set this critical administrative variable:
The impact of this vulnerability is High for several reasons:
Administrative Control Loss: After upgrade, if there's any storage layout change or if the implementation doesn't perfectly preserve the principal's address, the contract could lose its administrative capabilities.
Access Control Failure: The principal variable would likely be responsible for administrative functions in LevelTwo (though these functions aren't fully implemented yet). If this address is incorrect or zero, administrative functions would be inaccessible.
High Likelihood: The risk is particularly high because LevelTwo.sol has an entirely empty graduate() function, making it almost certain that any upgrade would fail to properly initialize this variable.
Contract Recovery Issues: Without a properly set principal address, recovering from any issues post-upgrade would be extremely difficult or impossible.
manual review / Slither and Aderyn tools
Implement a proper initialization in the graduate() function to ensure the principal variable is correctly set:
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.