An attacker can deploy a fake Stability Pool to steal liquidated collateral from borrowers when their loans are liquidated. The core issue is that there is no validation to check whether the stabilityPool
is a trusted contract before transferring NFTs or funds. This allows attackers to intercept liquidated assets without repaying the associated debt, leading to borrower losses, protocol insolvency, and bad debt accumulation.
Root Cause
The function finalizeLiquidation()
in LendingPool.sol lacks proper verification that the stabilityPool
is an authorized and trusted contract before transferring NFTs.
Vulnerable Function: finalizeLiquidation()
Attack Scenario
Attacker Deploys a Fake Stability Pool Contract
Attacker Registers Fake Stability Pool
Victim (Alice) Fails to Repay Loan & Gets Liquidated
Attacker Calls finalizeLiquidation()
Fake Stability Pool Intercepts NFTs & Transfers Them to Attacker
Attacker Sells Stolen NFTs on a Marketplace
Borrowers Lose Collateral: Stolen NFTs never repay debt.
Protocol Assumes Debt is Paid: The system remains insolvent.
Bad Debt Accumulates: Over time, attackers can bankrupt the lending protocol.
Manual Review
Whitelist and Validate the Stability Pool
Ensure Only Authorized Contracts Can Handle Liquidations
Implement Multi-Signature or DAO Governance to Modify Stability Pool Address
This fix ensures attackers cannot register fake contracts to steal collateral.
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.