Root Cause: The liquidate() function calculates total collateral to seize (debt value + 10% bonus) without verifying that the user actually has sufficient collateral balance in the specified token.
Impact: When a user's collateral is insufficient to cover both debt and bonus, the subtraction in _redeem_collateral() causes an underflow revert. This prevents legitimate liquidations from executing, leaving bad debt in the system and causing protocol insolvency over time.
Normal Behavior: During liquidation, a liquidator covers a user's debt and receives the equivalent collateral value plus a 10% bonus as incentive. The user's collateral balance should be sufficient to cover both the debt value and the bonus.
Issue: The liquidate() function calculates the total collateral to seize (debt value + 10% bonus) without verifying that the user actually has this much collateral. When the user's collateral is insufficient, the subtraction in _redeem_collateral() will underflow.
Likelihood:HIGH
Reason 1 : Occurs when a user becomes liquidatable with collateral value between 100% and 110% of their debt (in the specific collateral type being liquidated)
Reason 2 : Multi-collateral users may have sufficient total collateral but insufficient in one specific token
Impact:
Impact 1 : Protocol becomes insolvent as underwater positions cannot be cleared
Impact 2 : Legitimate liquidations revert, leaving bad debt in the system
A user deposits 1 ETH at $2000 and mints $900 DSC. When ETH drops to $950, the user becomes liquidatable. A liquidator attempts to cover the full $900 debt, requiring $990 worth of ETH (including 10% bonus), which equals approximately 1.042 ETH. Since the user only has 1 ETH, the subtraction underflows and the liquidation reverts.
Before attempting to redeem collateral, verify the user has sufficient balance. If the user's collateral is insufficient, cap the seizure at their available balance and proportionally reduce the debt being covered.
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.