The upgradeable contracts in the system, including TokenManger.sol, are using non-upgradeable versions of OpenZeppelin's Ownable and Pausable libraries. This can lead to malfunctioning access control and pausability in proxy-based upgradeable contracts.
The contracts are designed to be deployed as upgradeable proxy contracts, but they're using non-upgradeable versions of OpenZeppelin libraries:
Instead of:
exploit senario :
Non-upgradeable Ownable sets the owner in the constructor, which isn't called in proxy deployments.
Proxy-based upgradeability doesn't allow constructors, leading to no owner being set.
All onlyOwner
functions become inaccessible as there's no owner.
Similar issues apply to the Pausable functionality.
Using the incorrect version of the Ownable
library can result in a complete malfunction of all onlyOwner
functions. Without ownership, critical administrative functions could be permanently inaccessible like updateTokenWhiteListed
, initialize
,SystemConfig.sol::All Function
. and no address has the ability to pause the contract in case of emergencies.
Manual code Review
Replace non-upgradeable libraries with their upgradeable counterparts:
Valid high severity, since `initializeOwner` is not called for proxy contracts and the constructor for each `Rescuable.sol` contract will not be invoked during proxy deployment, this leaves the `owner` for each proxy unitialized allowing potential to withdraw fund from other proxy contracts inheriting `Rescuable.sol` respectively.
Valid high severity, since `initializeOwner` is not called for proxy contracts and the constructor for each `Rescuable.sol` contract will not be invoked during proxy deployment, this leaves the `owner` for each proxy unitialized allowing potential to withdraw fund from other proxy contracts inheriting `Rescuable.sol` respectively.
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.