Any given user can boost a pool infinitely due to some missing sanity checks and access control.
The updateUserBoost() function inside BoostController is used to "update the boost value for a user in a specific pool". The function has no access control and any user can call it with any arbitrary user/pool combo:
The issue is that any user can pass an arbitrary nAddress/pool combo as long as the address is not 0 and the pool is supported. If the passed user address has no veRAAC balance, the _calculateBoost() function will default to returning amount as newBoost:
Since the initial function passes 10_000 as amount, the pool will be boosted with that amount. The user can repeat this call with any arbitrary address (regardless if it's a user of the protocol or not) for a supported pool and boost it with 10k each time.
Any user can boost a pool infinitely by passing random addresses and a supported pool which will artificially bring up the reward yield of the pool. A side impact is that a user can also specify to boost a pool with the address of a user from the protocol which might not want to boost that pool but instead use their boost on another pool.
Manual Review
At the least implement access control so that only Alice can boost a pool with her address and not other people for her.
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.