The Governance
contract allows for the creation, voting on, and execution of proposals
. However, there is an oversight in the execute()
function that permits proposals
to be executed even if the proposer
's voting power
has fallen below the required threshold
.
When a proposal
is created, it requires the proposer
to have a certain amount of voting power
, defined by proposalThreshold
.
This ensures that only those with significant stakes can propose changes.
The cancel()
function allows for proposals
to be canceled
if the proposer’s voting power drops below this threshold.
However, the execute()
function does not perform a similar check, allowing proposals
to be executed regardless of the proposer's current voting power.
This means that even if a proposer’s voting power has dropped below the threshold after the proposal was created and voted on, the proposal could still be queued and executed.
This loophole allows proposers who, after creating a proposal, could lose their voting power but still push through their proposal, potentially leading to decisions that are not in the best interest of the community.
Manual Review
Add a check in the execute()
function to verify that the proposer still has voting power above the threshold before allowing the proposal to be executed.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.