Closed soloseng closed 1 week ago
Worked on implementing a hotfix mechanism using a Security Council multisig (number of signer TBD). This new process, however, is potentially less secure than the original validator hotfix process.
The hotfix process went from a 3 step to a 2 step approval process, as the prepare
step (using epoch number) has been deprecated.
The original validator hotfix process required a byzantine quorum of validators in order to execute a hotfix. Because validators had a financial incentive to not be malicious, this guaranteed that a set threshold of healthy, non-malicious validators approved the hotfix. In addition to that, since the list of validators approving the hotfix depended on current set of validators at the time of approval, it was much more difficult for validators to collude and approve a malicious hotfix.
With the prepare
step being deprecated, this leaves a hotfix proposal open to being executed at anytime after it was approved. This is divergent from the original hotfix process, as with each new epoch, the hotfixWhitelistValidatorTally
could change, requiring validators to reapprove a hotfix that was not executed in the allotted timeframe.
Using the multisig approach on L2, the list of signer would remain fixed. Given that there are no obvious incentives for Security Council signers to act for the greater good of the network, this increases the risk of collusion between Security Council signers, and the risk of a malicious hotfix being approved and executed. The main safety against malicious hotfix is based on the assumption that there will be no overlap or collusion between approvers and the Security Council signers.
With the prepare step being deprecated, this leaves a hotfix proposal open to being executed at anytime after it was approved. This is divergent from the original hotfix process, as with each new epoch, the hotfixWhitelistValidatorTally could change, requiring validators to reapprove a hotfix that was not executed in the allotted timeframe.
I added a time limit for the prepareHotfix step on L2. This requires the approvers and Security Council to re-approve and prepare the hotfix once the hotfixes[hash].executionTimeLimit
has elapsed.
Generated at commit: dbe6a673acf44e1fd8e90752a1bc679715adb48a
🚨 Report Summary
Severity Level Results Contracts Critical High Medium Low Note Total 2 3 0 15 41 61 Dependencies Critical High Medium Low Note Total 0 0 0 0 0 0
For more details view the full report in OpenZeppelin Code Inspector
Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
Description
Implements 2 phase hotfixes (Approval & execute):
Tested
Unit tested.
Related issues
Fixes https://github.com/celo-org/celo-blockchain-planning/issues/199
Fixes https://github.com/celo-org/celo-blockchain-planning/issues/198
Backwards compatibility
Maintains backwards compatibility with L1.