The RToken's burn() function incorrectly compares amount (in reserveAsset/crvUSD units) with userBalance (in RToken units), failing to account for the liquidity index scaling factor.
In RToken's burn() function, there is a critical comparison issue between incompatible asset types. The function compares amount (in reserveAsset/crvUSD units) with userBalance (in RToken units) directly, which is incorrect because balanceOf() returns the RToken balance scaled by the current liquidity index.
Unauthorized excess withdrawal of reserve assets
Breaking of asset-backing guarantees
Potential protocol insolvency
Manual Code Review
We need to convert to the same unit before comparison:
It's underlying vs underlying
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.