Low
The contract permanently assigns the principal role during initialization with no mechanism to transfer this role or replace the principal if they become unavailable, compromised, or need to be replaced.
The LevelOne contract sets the principal address in the initialize function but doesn't provide any function to update this critical role:
This creates a single point of failure, as only the principal can perform critical functions such as adding/removing teachers, starting sessions, and upgrading the contract. If the principal's private key is compromised or the principal becomes unavailable, these administrative functions become inaccessible, potentially causing the entire school system to become non-functional.
Implement a function that allows the current principal to transfer ownership to a new address, similar to OpenZeppelin's Ownable pattern:
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.