leastwood
There are a number of contracts which inherit UUPSUpgradeable.sol, namely; GovernanceAction.sol, PauseRouter.sol and NoteERC20.sol. All these contracts are deployed using a proxy pattern whereby the implementation contract is used by the proxy contract for all its logic. The proxy contract will make delegate calls to the implementation contract. This helps to facilitate future upgrades by pointing the proxy contract to a new and upgraded implementation contract. However, if the implementation contract is left uninitialized, it is possible for any user to gain ownership of the onlyOwner role in the implementation contract for NoteERC20.sol. Once the user has ownership they are able to perform an upgrade of the implementation contractβs logic contract and delegate call into any arbitrary contract, allowing them to self-destruct the proxyβs implementation contract. Consequently, this will prevent all NoteERC20.sol interactions until a new implementation contract is deployed.
Initial information about this issue was found here.
Consider the following scenario:
Manual code review
Consider initializing the implementation contract for NoteERC20.sol and checking the correct permissions before deploying the proxy contract or performing any contract upgrades. This will help to ensure the implementation contract cannot be self-destructed.
The text was updated successfully, but these errors were encountered:
All reactions