The increase
function allows bypassing the MAX_TOTAL_LOCKED_AMOUNT limit by adding tokens to existing locks after initial creation, enabling the protocol to exceed its intended maximum locked value. Which in turn lets users to dilute voting rights and get unfair boosts.
The protocol enforces MAX_TOTAL_LOCKED_AMOUNT during initial lock creation but fails to validate it when increasing existing locks, allowing:
Initial lock creation under the limit
Subsequent increases that push total locked over MAX_TOTAL_LOCKED_AMOUNT
The vulnerability arises because:
MAX_TOTAL_LOCKED_AMOUNT check exists in lock()
No equivalent check in increase()
Because the MAX_TOTAL_LOCKED_AMOUNT is breached through the increase function, this leads to dilution in the governance voting rights for the people that actually deposited before the limit is beached. This also ends up distorting the boost mechanism, where the users who increase their locks are unfairly rewarded with boosts in spite of having reached the MAX_TOTAL_LOCKED_AMOUNT.
Manual review
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.