In the liquidation system of the RAAC Lending Protocol, it allows users to delay liquidation due to lack of incentives for any one to call LendingPool::initiateLiquidation function on a liquidatable address. Since the liquidation grace period starts only when this function is called, users can remain in an unhealthy state for an extended period, artificially extending their grace period and avoiding liquidation longer than intended.
This flaw introduces systemic risk to the lending pool by allowing bad debt to accumulate while reducing incentives for liquidators. If left unaddressed, it could destabilize the protocol by creating an inefficient liquidation process and a potential vector for market manipulation.
In the current implementation of LendingPool::initiateLiquidation, the grace period timer starts when liquidation is initiated rather than when the user first becomes liquidatable (i.e., when their health factor drops below the threshold).
How the Exploit Works
A user’s health factor drops below the liquidation threshold—making them eligible for liquidation. No one immediately calls initiateLiquidation, so the user remains liquidatable but not yet in liquidation .Days or weeks later, LendingPool::initiateLiquidation is finally called—but this starts the grace period from that moment rather than from when they originally became liquidatable. The user to be liquidated now gets an extended grace period, even though they were ineligible for liquidation much earlier.
This means the user can remain liquidatable indefinitely until liquidation is manually triggered, effectively doubling the grace period.
If liquidations are not executed promptly, the lending pool absorbs risk from unhealthy loans. A user with inside knowledge can delay liquidation and time market events to exploit price fluctuations.
This vulnerability was tested in protocols-tests.js, specifically within the "StabilityPool" test suite. The following test demonstrates how a user remains liquidatable but avoids liquidation for an extended period before liquidation is finally triggered, artificially extending their grace period:
This vulnerability affects the core liquidation mechanism of the protocol, which is essential for maintaining capital efficiency and solvency. Without timely liquidations:
Risky loans remain open for longer, increasing exposure to bad debt.
The protocol loses efficiency, as unhealthy positions are not cleared promptly.
Large-scale abuse could lead to cascading failures if multiple users exploit the delay.
Manual Review, Hardhat
Incentivize Timely Liquidation Calls
To ensure that liquidations are triggered as soon as possible, introduce a small fee incentive for users who successfully find and report liquidatable accounts. With incentives in place, liquidators are incentivized to report bad loans faster, reducing the delay between a user falling below the threshold and being liquidated.
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.