The initialize function accepts various roles as part of the _roles parameter (SecurityCouncilManagerRoles). However, it doesn't validate whether any of these role addresses are set to the zero address (address(0)). This omission might result in inadvertently assigning critical roles to the zero address, which would render them unassignable and unusable.
Proof of Concept
Assigning roles to the zero address can introduce security risks and functional problems:
Security Risks: If a malicious actor can exploit the setup to set a role to the zero address, it can hinder critical functionalities that rely on that role.
Functionality Block: Once a role is assigned to the zero address, it becomes impossible to assign that role to a valid address or perform any operations that require that role.
Tools Used
Manual
Recommended Mitigation Steps
Introduce validation checks for each role in the _roles parameter to ensure none of them are set to the zero address
Lines of code
https://github.com/ArbitrumFoundation/governance/blob/c18de53820c505fc459f766c1b224810eaeaabc5/src/security-council-mgmt/SecurityCouncilManager.sol#L103
Vulnerability details
Impact
The initialize function accepts various roles as part of the _roles parameter (SecurityCouncilManagerRoles). However, it doesn't validate whether any of these role addresses are set to the zero address (address(0)). This omission might result in inadvertently assigning critical roles to the zero address, which would render them unassignable and unusable.
Proof of Concept
Assigning roles to the zero address can introduce security risks and functional problems:
Security Risks: If a malicious actor can exploit the setup to set a role to the zero address, it can hinder critical functionalities that rely on that role.
Functionality Block: Once a role is assigned to the zero address, it becomes impossible to assign that role to a valid address or perform any operations that require that role.
Tools Used
Manual
Recommended Mitigation Steps
Introduce validation checks for each role in the _roles parameter to ensure none of them are set to the zero address
Assessed type
Invalid Validation