The BoostController
contract fails to properly update user boost values during pause/unpause transitions, allowing users to maintain inflated boost values even after their veRAACToken locks have expired. This issue stems from the contract's reliance on manual updates to refresh boost values.
The BoostController
contract is responsible for calculating and managing boost multipliers based on users' veRAACToken voting power. When a user's lock expires, their voting power drops to 0, but their boost value remains unchanged until updateUserBoost
is called:
While the _calculateBoost
function correctly uses getVotingPower
, the issue arises because:
User boost values are only updated when updateUserBoost
is called
During a pause, no updates can be made
After unpause, boosts remain at their old values until manually updated
This creates a window of opportunity where users can maintain inflated boost values after their locks expire, particularly during pause/unpause transitions.
High severity. This vulnerability allows users to:
Maintain maximum boost multipliers (up to 2.5x) even after their veRAACToken locks expire
Receive higher rewards than they should in protocol pools
Exploit the pause/unpause functionality to extend the duration of their inflated boosts
The economic impact scales with:
The duration of the pause
The number of users with expired locks
The size of the affected pools
The difference between minimum and maximum boost multipliers (1x to 2.5x)
The following test demonstrates the vulnerability:
Test output shows:
Manual code review
Foundry for testing
Add automatic boost updates during unpause by modifying the setEmergencyShutdown
function:
Additionally:
Consider implementing a global boost update mechanism that can be triggered by admins
Add a function to batch update boosts for multiple users
Implement automatic boost updates when locks expire
Similar issue in Curve's veCRV system (Section 3.2)
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.