Closed code423n4 closed 1 year ago
This looks like the intended behaviour even giving more room in setting of the proposal deadlines via nomineeVettingDuration during upgrades.
Could be QA.
0xSorryNotSorry marked the issue as low quality report
0xean changed the severity to QA (Quality Assurance)
Hey @0xean I think there was an oversight on this one, can you please reconsider?
I don't think we can say this is the "intended behaviour" as this vulnerability can have at least the following impacts:
The base OZ GovernorUpgradeable base class is implemented correctly where the state/parameters of each proposal are stored with the proposalId to guarantee the proposal's immutability (including timing) while SecurityCouncilNomineeElectionGovernorTiming's timing is mutable.
I don't believe this qualifies as M, I don't see how an "attacker" can change nomineeVettingDuration
. Broadly, this could fall under some "Centralization concerns" that should be OOS based on the bot report. I believe QA is correct here.
@0xean couple of points here:
QA has ended, thanks for your comments. This will remain as judged.
Lines of code
https://github.com/ArbitrumFoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/governors/modules/SecurityCouncilNomineeElectionGovernorTiming.sol#L69-L71 https://github.com/ArbitrumFoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol#L332 https://github.com/ArbitrumFoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol#L142-L150 https://github.com/ArbitrumFoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/governors/SecurityCouncilNomineeElectionGovernor.sol#L266-L269
Vulnerability details
Impact
The SecurityCouncilNomineeElectionGovernor contract inherits from SecurityCouncilNomineeElectionGovernorTiming which implements proposalVettingDeadline to retrieve the deadline for the nominee vetting period for a given
proposalId
. While the GovernorUpgradeable's proposalDeadline correctly stores the proposal parameters with theproposal
/proposalId
itself, the proposalVettingDeadline uses the nomineVettingDuration (asproposalDeadline(proposalId) + nomineVettingDuration
) of the SecurityCouncilNomineeElectionGovernorTiming contract which is initialized at the end of its __SecurityCouncilNomineeElectionGovernorTiming_init initializer and therefore can mutate globally during upgrades affecting all existing proposals (for both the _execute function and the onlyVettingPetiod).Proof of Concept
From https://github.com/ArbitrumFoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/governors/modules/SecurityCouncilNomineeElectionGovernorTiming.sol
From
Tools Used
n/a
Recommended Mitigation Steps
Store nomineeVettingDuration with the proposal / proposalId.
Assessed type
Governance