Liquidation DoS Auditor
When to Use
- Auditing liquidation mechanisms for DoS vectors
- User mentions: liquidation DoS, unbounded loops, gas limits, front-run liquidation, callback attacks, reentrancy, token compatibility
- Analyzing liquidation griefing attacks, gas exhaustion, revert conditions
- Reviewing position enumeration, collateral seizure, token integrations
Audit Workflow
IMPORTANT: Announce skill usage at the start of analysis
Begin with: "I'm using the audit-liquidation-dos skill to analyze this contract for liquidation denial of service vulnerabilities..."
Scan for liquidation operations
- Search:
liquidate, seizeCollateral, for, while, onERC721Received, transfer, nonReentrant, positions, EnumerableSet
- Focus: loops, callbacks, reentrancy guards, token transfers, balance checks
Check against vulnerability patterns
- Reference
reference.md for complete checklist
- Compare code against
example.md
Validate exploitability
- Check access control first - grep for
onlyOwner|onlyAdmin|onlyGovernance modifiers
- Can non-privileged actors trigger liquidation DoS?
- Can liquidation be blocked via gas exhaustion?
- Can users front-run to prevent liquidation?
- Can callbacks or hooks revert liquidation?
- Can token incompatibilities block liquidation?
- Verify no compensating protections exist
- Downgrade severity if admin-only unless prevents all liquidations
Generate report
- Use deliverable template below
- Include PoC showing DoS condition
- Rank by severity
Core Vulnerability Patterns
See reference.md for full checklist. Key patterns:
- Unbounded loops over positions → OOG revert during liquidation
- Data structure corruption → liquidation reverts on corrupted state
- Front-run prevention → nonce change or self-liquidation blocks liquidator
- Pending withdrawals → equal to balance causes revert
- Malicious callbacks → ERC721/ERC20 hooks revert to prevent liquidation
- External vault collateral → not seized during liquidation
- Insufficient insurance fund → bad debt blocks liquidation
- Fixed bonus exceeds collateral → 110% bonus fails when ratio < 110%
- Non-18 decimal handling → precision errors cause reverts
- Multiple nonReentrant → conflicting guards block execution
- Zero transfer reverts → missing checks with strict tokens
- Token deny lists → USDC blocklists prevent transfers
- Single borrower edge case → assumes > 1 borrower
Code examples: See example.md
Severity Criteria
Critical: Liquidation permanently blocked causing protocol insolvency, all positions unliquidatable, MUST be exploitable by non-privileged actors
High: Specific positions unliquidatable via griefing, protocol accumulates bad debt from DoS, MUST be exploitable by non-privileged actors
Medium: Liquidation delayed or requires special conditions, increases bad debt risk, admin-only liquidation function DoS issues with cascading impact
Low: Edge case DoS with limited impact, easily mitigated, admin-only function issues without immediate liquidation impact
IMPORTANT: Admin-only liquidation functions (onlyOwner, onlyAdmin, onlyGovernance) with DoS vectors are MEDIUM or LOW severity unless:
- Admin function failure prevents all liquidations protocol-wide
- DoS in admin function enables bad debt accumulation affecting all users
- Admin liquidation path is the only liquidation mechanism (no trustless alternative)
False Positives - Do NOT Flag
- Bounded loops with documented max limits
- Trusted token integrations (if explicitly documented)
- Admin-controlled liquidation paths with known restrictions
- Intentional liquidation delays with explicit design docs
- Protocols using liquidation queues or alternative mechanisms
- Admin-only liquidation helper functions (onlyOwner, onlyAdmin) where public liquidation path exists
- Governance-controlled collateral seizure functions with documented emergency-only usage
- Admin batch liquidation functions with gas limits where single liquidation still works
Deliverable Format
MANDATORY: Before deliverable, verify each checklist.md item against codebase. Flag violations as findings.
Use template: templates/report-template.md
Each finding includes: severity, pattern #, file/lines, description, vulnerable code, DoS impact analysis, PoC showing griefing attack, remediation, gas impact.
Key Principles
- Bounded iteration - never loop over unbounded user-controlled arrays
- Graceful degradation - liquidation should work even with bad debt/edge cases
- Front-run resistance - liquidation cannot be blocked by borrower actions
- Callback isolation - external calls cannot revert liquidation
- Token compatibility - handle zero transfers, deny lists, non-standard decimals
Output Guidelines
DO:
- Reference specific lines and functions
- Provide executable PoCs showing DoS
- Quantify gas limits and iteration costs
- Show token compatibility issues
DON'T:
- Report intentional design choices with documentation
- Flag bounded loops with max limits
- Use vague terms ("could cause DoS")
- Ignore compensating mechanisms (liquidation queues, etc.)
1---2name: audit-liquidation-dos3description: Audits Solidity liquidation mechanisms for denial of service vulnerabilities including unbounded loops over positions causing out-of-gas reverts, data structure corruption preventing liquidation, front-running to block liquidation via nonce changes or self-liquidation, pending withdrawals forcing reverts, malicious ERC721/ERC20 callback reverts, collateral in external vaults not seized, insufficient insurance fund blocking liquidation, fixed bonus exceeding available collateral, incorrect decimal handling, conflicting nonReentrant modifiers, zero value transfer reverts, token deny list issues, and single borrower edge cases4allowed-tools: Read, Grep, Glob5license: MIT6compatibility: Designed for Claude Code (or similar products)7metadata:8 author: Tomasz Kowalczyk (tom@auditmos.com)9 version: "1.0"10---1112# Liquidation DoS Auditor1314## When to Use15- Auditing liquidation mechanisms for DoS vectors16- User mentions: liquidation DoS, unbounded loops, gas limits, front-run liquidation, callback attacks, reentrancy, token compatibility17- Analyzing liquidation griefing attacks, gas exhaustion, revert conditions18- Reviewing position enumeration, collateral seizure, token integrations1920## Audit Workflow2122**IMPORTANT: Announce skill usage at the start of analysis**2324Begin with: "I'm using the **audit-liquidation-dos** skill to analyze this contract for liquidation denial of service vulnerabilities..."25261. **Scan for liquidation operations**27 - Search: `liquidate`, `seizeCollateral`, `for`, `while`, `onERC721Received`, `transfer`, `nonReentrant`, `positions`, `EnumerableSet`28 - Focus: loops, callbacks, reentrancy guards, token transfers, balance checks29302. **Check against vulnerability patterns**31 - Reference `reference.md` for complete checklist32 - Compare code against `example.md`33343. **Validate exploitability**35 - **Check access control first** - grep for `onlyOwner|onlyAdmin|onlyGovernance` modifiers36 - Can non-privileged actors trigger liquidation DoS?37 - Can liquidation be blocked via gas exhaustion?38 - Can users front-run to prevent liquidation?39 - Can callbacks or hooks revert liquidation?40 - Can token incompatibilities block liquidation?41 - Verify no compensating protections exist42 - Downgrade severity if admin-only unless prevents all liquidations43444. **Generate report**45 - Use deliverable template below46 - Include PoC showing DoS condition47 - Rank by severity4849## Core Vulnerability Patterns5051See `reference.md` for full checklist. Key patterns:52531. Unbounded loops over positions → OOG revert during liquidation542. Data structure corruption → liquidation reverts on corrupted state553. Front-run prevention → nonce change or self-liquidation blocks liquidator564. Pending withdrawals → equal to balance causes revert575. Malicious callbacks → ERC721/ERC20 hooks revert to prevent liquidation586. External vault collateral → not seized during liquidation597. Insufficient insurance fund → bad debt blocks liquidation608. Fixed bonus exceeds collateral → 110% bonus fails when ratio < 110%619. Non-18 decimal handling → precision errors cause reverts6210. Multiple nonReentrant → conflicting guards block execution6311. Zero transfer reverts → missing checks with strict tokens6412. Token deny lists → USDC blocklists prevent transfers6513. Single borrower edge case → assumes > 1 borrower6667**Code examples:** See `example.md`6869## Severity Criteria7071**Critical:** Liquidation permanently blocked causing protocol insolvency, all positions unliquidatable, **MUST be exploitable by non-privileged actors**72**High:** Specific positions unliquidatable via griefing, protocol accumulates bad debt from DoS, **MUST be exploitable by non-privileged actors**73**Medium:** Liquidation delayed or requires special conditions, increases bad debt risk, **admin-only liquidation function DoS issues with cascading impact**74**Low:** Edge case DoS with limited impact, easily mitigated, **admin-only function issues without immediate liquidation impact**7576**IMPORTANT:** Admin-only liquidation functions (onlyOwner, onlyAdmin, onlyGovernance) with DoS vectors are **MEDIUM or LOW severity** unless:77- Admin function failure prevents all liquidations protocol-wide78- DoS in admin function enables bad debt accumulation affecting all users79- Admin liquidation path is the only liquidation mechanism (no trustless alternative)8081## False Positives - Do NOT Flag8283- Bounded loops with documented max limits84- Trusted token integrations (if explicitly documented)85- Admin-controlled liquidation paths with known restrictions86- Intentional liquidation delays with explicit design docs87- Protocols using liquidation queues or alternative mechanisms88- **Admin-only liquidation helper functions** (onlyOwner, onlyAdmin) where public liquidation path exists89- Governance-controlled collateral seizure functions with documented emergency-only usage90- Admin batch liquidation functions with gas limits where single liquidation still works9192## Deliverable Format9394**MANDATORY:** Before deliverable, verify each `checklist.md` item against codebase. Flag violations as findings.9596Use template: `templates/report-template.md`9798Each finding includes: severity, pattern #, file/lines, description, vulnerable code, DoS impact analysis, PoC showing griefing attack, remediation, gas impact.99100## Key Principles101102- **Bounded iteration** - never loop over unbounded user-controlled arrays103- **Graceful degradation** - liquidation should work even with bad debt/edge cases104- **Front-run resistance** - liquidation cannot be blocked by borrower actions105- **Callback isolation** - external calls cannot revert liquidation106- **Token compatibility** - handle zero transfers, deny lists, non-standard decimals107108## Output Guidelines109110**DO:**111- Reference specific lines and functions112- Provide executable PoCs showing DoS113- Quantify gas limits and iteration costs114- Show token compatibility issues115116**DON'T:**117- Report intentional design choices with documentation118- Flag bounded loops with max limits119- Use vague terms ("could cause DoS")120- Ignore compensating mechanisms (liquidation queues, etc.)