An attacker could manipulate the delegation mechanism to gain disproportionate influence in the voting process.
The _delegate
and _moveDelegates
functions can be exploited by an attacker to manipulate the vote counts.
An attacker can set up multiple addresses and stake tokens in each. By frequently changing the delegation between these addresses and a central master address, the attacker can artificially inflate the vote count of the master address. This manipulation is facilitated by the frequent delegation changes which may not be adequately accounted for in the vote-moving logic.
Here we can see how the delegation works:
As you can see there is no cooldown period for delegations.
Multiple Addresses Setup: The attacker stakes tokens in multiple addresses.
Delegation to Master Address: The attacker delegates the voting power from all these addresses to a single master address.
Frequent Delegation Changes: The attacker repeatedly changes the delegation between various addresses to manipulate the vote count.
Final Delegation to Master: The attacker delegates everything back to the master address, gaining more voting weight and consolidating the manipulated vote count.
This allows an attacker to gain disproportionate voting power, potentially influencing governance decisions in their favor. This can undermine the integrity of the voting process and lead to governance decisions that do not reflect the true will of the stakeholders.
Manual code review
Implement a cooldown period between delegations to prevent frequent changes
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.