The browser service capped normal page-load waits, but request settings governing delays before returning HTML and delays between operations did not share those limits. A caller could submit enormous values, including around one billion seconds, without triggering the page timeout validator. Long-lived stream handling created a separate resource-retention…
Inspect the ClaimsCase · DiggingBeagle record
Crawl4AI accepted unbounded delay parameters and occupied browser capacity
Crawl4AI applied bounds to page timeout but accepted independent delay settings large enough to exhaust a browser pool.
Affected Crawl4AI API paths before 0.9.5 including long-lived crawl streams; delay parameters could be extraordinarily large or invalid. Denial of service demonstrated, not data theft.
Assessment profile
Assessment method- Setting
- research demonstration
- Exploitation
- demonstrated
- Impact
- Band 1 of 4
- Evidence
- Grade B
- Remediation
- fixed reported
- AI role
- AGAINST AI
Basis and provenance
GHSA-rhjm-7hj7-75fx shows that page_timeout clamps did not bound separate delay values, particularly for stream requests; patched 0.9.5 adds limits and invalid-value rejection. A global production outage or victim count is not evidenced.
Impact basis: Unbounded attacker-chosen delays monopolized crawler/browser capacity in the tested API path. This is an availability effect, not remote execution or information disclosure.
Assessed Oct 19, 2026 using diggingbeagle.assessment/1.
Evidence basis: CLM-CRAWL4AI-DELAY-RESOURCE-DOS · GHSA-rhjm-7hj7-75fx: Crawl4AI accepted unbounded delay parameters and occupied browser capacity
At a glance
Request timeouts bounded page navigation but not caller-selected delay stages, so one apparently ordinary crawl could occupy resources without a corresponding page-load violation.
Read the implicationsThis is a bounded availability finding, not evidence of arbitrary instruction execution or private data access. The patched release enforces numeric validation and time ceilings.
Limits and uncertaintyFull account
The browser service capped normal page-load waits, but request settings governing delays before returning HTML and delays between operations did not share those limits. A caller could submit enormous values, including around one billion seconds, without triggering the page timeout validator. Long-lived stream handling created a separate resource-retention path from the ordinary bounded request endpoint.
This was not a slow backend inadvertently keeping the connection open. The service had accepted an intentional caller-controlled wait and kept scarce browser capacity committed to it. Concurrent users could then lose availability even though the standard page-load timeout looked reasonable in configuration.
The 0.9.5 fix reportedly bounds delay values, including malformed negative and non-finite numbers. Useful acceptance tests must run concurrent streaming and non-streaming requests, then verify worker reclamation after cancellation or disconnection. Limiting one duration field does not constrain the sum of independently configurable delays across a complex tool call.
Claims & evidence
CLM-CRAWL4AI-DELAY-RESOURCE-DOSSeveral Crawl4AI delay settings were accepted without the limits applied to ordinary page timeout, allowing requests to reserve browser resources for extremely long durations.supported
Basis: reported finding
- supportsGHSA-rhjm-7hj7-75fx: Crawl4AI accepted unbounded delay parameters and occupied browser capacityprimary disclosure
Unbounded CrawlerRunConfig delays; fixed v0.9.5
Implications
Request timeouts bounded page navigation but not caller-selected delay stages, so one apparently ordinary crawl could occupy resources without a corresponding page-load violation.
Controls and mitigations
- Clamp all request-controlled timing fields and enforce a process-level resource lease covering streaming and non-streaming work.
Unknowns and contradictions
- This is a bounded availability finding, not evidence of arbitrary instruction execution or private data access. The patched release enforces numeric validation and time ceilings.
Sources and citation
Material revision history
- Oct 19, 2026 · Published version · first publication · revision 174
- Oct 19, 2026 · Canonical change recorded · material revision · revision 175Public fields changed: assessment_profile