The FeeCollector::claimRewards function lacks authorization checks, allowing any address to claim rewards on behalf of arbitrary users. This enables malicious actors to trigger reward claims when victims' voting power has decayed to minimal levels, reducing their eligible rewards due to the baseline reset mechanism in userRewards.
User A locks tokens for 1 year, receiving maximum initial voting power
Voting power decays linearly over time
Attacker waits until victim's voting power nears expiration:
Attacker calls claimRewards(victim) when voting power is minimal but non-zero
Protocol calculates rewards using decayed voting power:
userRewards[userA] is set to current totalDistributed, preventing future claims at higher voting power levels
Add this test to FeeCollector.test.js:
Medium Severity - Allows permanent reduction of user rewards through timed attacks, disrupting protocol's incentive alignment. While not directly stealing funds, it enables manipulation of reward distribution schedules and breaks core protocol guarantees.
Add Role-Based Access Control:
Introduce Claim Approval System:
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.