A user can sandwich the RAACMinter::tick() function to massively inflate the emission of rewards.
For this attack to work, an attacker (Alice) must first stake a large amount of rToken into the Stability Pool contract. This ensures she is eligible for RAAC rewards.
Next, Alice can front-run an upcoming mint of RAAC rewards. Since minting is triggered by the tick() function, Alice can even manually initiate it—she just needs to time the emission interval correctly.
Alice deposits a large amount of rToken into the StabilityPool, receiving deToken and becoming eligible for rewards.
Alice waits for the emission interval to complete so that tick() can be called and RAAC rewards can be distributed.
Once the emission interval has passed, Alice, while maintaining healthy collateral level, can borrow a large amount of funds, inflating the RAAC rewards emission by front-running the tick() function.
In the next block, Alice repays the debt, but the inflated RAAC rewards remain issued.
Let's look at the code snippets below:
Update calls calculate ->
The emission rate is calculated based on the utilization rate, which includes totalBorrowed from the lending pool.
Since higher borrowing leads to higher rewards, Alice can exploit this mechanism to artificially increase her RAAC rewards without real cost.
Stealing from the protocol
Manual review
Fix is not trivial
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.