Users holding AssetToken shares are entitled to redeem their shares for the corresponding amount of underlying tokens at any time.
In AssetToken::redeem(), the redeem calculation (amountOfAssetToken * exchangeRate) / s_exchangeRatePrecision truncates to zero when users redeem small dust balances. Because AssetToken reverts when the output amount is zero, dust shares become unredeemable and permanently trapped.
Likelihood:
Occurs whenever a user attempts to exit their remaining fractional dust shares.
Regularly experienced by retail users attempting to close their account positions.
Impact:
Trapping and permanent freezing of residual user funds.
Inconvenience and economic loss for depositors attempting complete account closure.
The exploit operates through the following steps:
User deposits and earns yield, leaving a small remaining balance of 1 wei share.
User calls thunderLoan.redeem(tokenA, 1).
The calculation (1 * 1e18) / 1e18 on modified exchange rates evaluates to zero.
The transaction reverts with AssetToken__RedeemAmountCannotBeZero, preventing account closure.
Allow zero-value dust redemptions to burn the share without reverting, or transfer any non-zero remainder to the user.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.