Closed code423n4 closed 1 year ago
This looks like as it's the intended behaviour in the context of halting a governance.
0xSorryNotSorry marked the issue as primary issue
0xrajath marked the issue as sponsor acknowledged
0xrajath marked the issue as disagree with severity
Acknowledging this since it's a valid concern. But can be marked as low severity since there are multiple ways around this. We can just assign the same role to approval role and disapproval role or even assign a dummy role to a dummy address that can be used as a placeholder role.
This is a nice informational find but not a vulnerability and more of a UX concern.
gzeon-c4 changed the severity to QA (Quality Assurance)
gzeon-c4 marked the issue as grade-c
Lines of code
https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/strategies/LlamaRelativeQuorum.sol#L204-L205 https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/strategies/LlamaAbsoluteQuorum.sol#L32-L33 https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/strategies/LlamaAbsolutePeerReview.sol#L45-L46 https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/strategies/LlamaAbsolutePeerReview.sol#L74-L82 https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/strategies/LlamaAbsoluteQuorum.sol#L55-L62 https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/strategies/LlamaRelativeQuorum.sol#L229-L232 https://github.com/code-423n4/2023-06-llama/blob/aac904d31639c1b4b4e97f1c76b9c0f40b8e5cee/src/LlamaCore.sol#L516-L562
Vulnerability details
Impact
Every strategy has a validateActionCreation function which checks if anybody holds a approval and disapproval role and reverts if not when a Policyholder tries to create an action. Checking the disapproval role is unnecessary if disapproving is disabled and can prevent Policyholders from creating actions.
The condition check occurs in all strategies here is an example from LlamaRelativeQuorum.sol:
The possibility to disable disapproving also occurs in all strategies here is a example from LlamaRelativeQuorum.sol on how to check if disapproval is enabled:
The validateActionCreation function of the strategy is called inside the _createAction function of LlamaCore.sol which can lead to a DoS for Policyholders.
Proof of Concept
Tools Used
Manual Review, Foundry, VSCode
Recommended Mitigation Steps
Check first if disapproval is enabled and only check for the disapprovalPolicySupply if it is enabled.
Assessed type
DoS