The BoostController contract bypasses the entire BoostState tracking system by using memory parameters instead of storage state for boost calculations, breaking core boost mechanics and enabling potential reward manipulation.
Important note: using memory instead of state is main vulnerability here as it bypasses time-weighted average tracking and state updates (the fact it uses test version of calculation function is not relevant to the root cause).
The BoostController calculates boosts using memory parameters instead of the intended storage-based BoostState tracking system:
The internal _calculateBoost
function has the same issue:
Key Issues:
Uses testing version of boost calculation in production
Bypasses all time-weighted average tracking
No period tracking for boost evolution
Missing historical boost data recording
Makes boost manipulation possible through rapid balance changes
Instant boost changes possible instead of gradual changes
No protection against boost manipulation through quick deposits/withdrawals
Missing audit trail of boost changes
Core boost mechanics broken
Reward gaming possible through boost manipulation
Manual Review
Modify BoostController to use storage-based state tracking:
Remove memory parameter version of calculateTimeWeightedBoost from production code
Ensure all boost calculations use storage state
Add proper period tracking for boosts
Implement time delay requirements for boost 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.