Rounding error in BoostController.getBoostMultiplier will lead to inflated boost multiplier calculation for dust delegation.
The BoostController is designed to manage boost calculations and delegations for the protocol. It implements Curve-style boost mechanics with configurable multipliers and supports pool-specific boost management.
Users can delegate their boost to certain pools and get multiplier.
If we take a look at BoostController.getBoostMultiplier
The code is susceptible to rounding error.
For example, if userBoost.amount< 3 then baseAmountwill be rounded down to zero and the function will revert with division by zero error.
If userBoost.amount =3then, baseAmountwill be rounded down to 1 and boost multiplier will be 30000
POC
One of the main protocol's invariant is broken. Attackers can gain 3x multiplier by delegating 3 weito any pool.
Manual Review
Either one of the following approaches will fix the problem:
Multiply before division
Use fixed point math
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.