The FeeCollector contract has a flaw in reward distribution calculations where a user's rewards can exceed the total distributed amount. This breaks fundamental accounting principles and could lead to reward inflation. In the reward calculation logic where voting power changes aren't properly bounded against total distributions: FeeCollector.sol#_calculatePendingRewards
The core vulnerability lies in the unbounded share calculation and lack of validation against totalDistributed. This matches exactly with the Certora verification rule that failed: verifyUserRewardBounds.
The FeeCollector contract manages reward distribution in a way similar to a bank's dividend system. Just as a bank tracks total dividends paid and individual account balances, the contract tracks totalDistributed and individual userRewards. However, there's flaw in this accounting system.
Imagine a bank allowing withdrawals to exceed its total deposits, this is exactly what happens in the FeeCollector. When users interact with the contract, their voting power through veRAACToken determines their reward share. The contract calculates this share using: FeeCollector.sol#L486
A malicious user could manipulate their voting power right before reward distribution. For example, if totalDistributed is 1000 RAAC tokens and a user temporarily increases their voting power to 90% of the total, they could claim 900 RAAC tokens even if the intended distribution was much lower.
The impact ripples through the entire protocol. When excessive rewards are claimed, it depletes the reward pool faster than intended, directly affecting other users' ability to claim their fair share. And this isn't just about individual losses it undermines the entire incentive structure designed to encourage long-term protocol participation.
Looking at the code:
The contract assumes voting power ratios will always result in valid reward amounts, but fails to enforce this invariant.
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.