Closed code423n4 closed 1 year ago
Technically valid. But the potential DAO errors in restricted functions is considered as QA.
0xSorryNotSorry marked the issue as low quality report
0xean changed the severity to QA (Quality Assurance)
0xean marked the issue as grade-b
Lines of code
https://github.com/arbitrumfoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/SecurityCouncilManager.sol#L97-L102
Vulnerability details
Impact
The
documentation
of theArbitrum Security Council Elections
protocol mentions that theSecurity Council
consists of12 members
and it is split intotwo cohorts
as shown below:In the
SecurityCouncilManager.initialize
function thelengths
of thetwo cohorts
are verified as follows:The above verification ensures that
_firstCohort.length == _secondCohort.length
but it does not verify that the_firstCohort.length == _secondCohort.length == 6
which is intended number of members per cohort as per the protocol documentation.Hence the
SecurityCouncilManager
contract can be deployed with more than 12 members split into to cohorts as long as the_firstCohort.length == _secondCohort.length
condition is fulfilled. This could set thecohortSize
state variable to a value more than 6 as well.Hence this could lead to unintended behaviour of the protocol since the users of the protocol assumes that total number of members of the security council are 12 split into two cohorts equally each having 6 members.
Proof of Concept
https://github.com/arbitrumfoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/SecurityCouncilManager.sol#L97-L102
Tools Used
Manual Review and VSCode
Recommended Mitigation Steps
Hence it is recommended to update the
_firstCohort.length == _secondCohort.length
conditional check performed in theinitialize
function, as follows to ensure each cohort consists of 6 members.Assessed type
Invalid Validation