_authorizeUpgrade() — No Upgrade Safety ChecksThunderLoan.sol
ThunderLoanUpgraded.sol
The UUPS _authorizeUpgrade() function has an empty body, relying solely on the onlyOwner modifier inherited from OwnableUpgradeable. There are no additional safety checks such as timelock enforcement, multi-sig requirement, or new implementation validation.
Likelihood: Low — requires owner key compromise.
Impact: High — a compromised owner key can immediately upgrade to a malicious implementation without any delay or validation.
Severity: Low
A compromised owner can call upgradeTo(maliciousAddress) in a single transaction, immediately replacing the entire protocol logic without any warning, timelock, or governance process.
Add implementation validation inside _authorizeUpgrade() to ensure the new implementation is non-zero and conforms to the expected interface. This prevents accidentally upgrading to an incompatible or empty contract. For additional safety, consider wrapping the upgrade behind a timelock or multi-sig governance contract.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.