Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Default-unauthenticated network API (PR:N, AV:N, AC:L) yields read-only SSRF exposing internal/metadata data (C:H) with no integrity or availability impact and no scope change.
Primary rating from NVD.
CVSS VectorNVD
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Lifecycle Timeline
6Blast Radius
ecosystem impact- 2 pypi packages depend on crawl4ai (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 0.8.9.
DescriptionNVD
Summary
The Docker API server applied its SSRF destination check to the crawl target URL only, not to the proxy address. An unauthenticated request could supply a proxy pointing at an internal IP and route the browser through it, reaching internal services and cloud-metadata endpoints, while using a perfectly valid crawl URL. The Docker API is unauthenticated by default.
Affected paths
/crawl, /crawl/stream, and /crawl/job accept a browser_config (and crawler_config). The following all feed Chromium's egress and were unchecked:
browser_config.proxy_config.serverbrowser_config.proxy(deprecated field)crawler_config.proxy_config.server--proxy-server/--proxy-pac-url/--proxy-bypass-list/--host-resolver-rulesflags inbrowser_config.extra_args
Attack
An attacker sends /crawl with a benign, validation-passing URL but a proxy_config.server pointing at an internal IP. Chromium routes all requests through that proxy. For plain-HTTP targets the proxy receives the full request and can return any content, which is then returned verbatim in the crawl result (results[0].html / cleaned_html / markdown). In a real deployment the proxy would be an attacker-controlled server pointing at cloud metadata (e.g. AWS IMDSv1 at 169.254.169.254) to retrieve IAM credential tokens.
Impact
Unauthenticated server-side request forgery to internal services and cloud-metadata endpoints, with the response returned to the attacker.
Fix
Every proxy destination is validated with the same global-routability check used for crawl URLs (reject any resolved address that is not is_global, including IPv6 transition forms) before the browser is constructed; proxy/DNS-redirecting flags are stripped from extra_args. A legitimate public proxy still works. Honors CRAWL4AI_ALLOW_INTERNAL_URLS.
Workarounds
- Upgrade to the patched version (0.8.9).
- Enable authentication (
CRAWL4AI_API_TOKEN). - Restrict the container's outbound network access (egress firewall / no metadata route).
Credits
Geo (geo-chen) - reported the proxy_config.server SSRF with a clear PoC.
Articles & Coverage 1
AnalysisAI
Unauthenticated server-side request forgery in Crawl4AI's Docker API server (versions < 0.8.9) lets remote attackers reach internal services and cloud-metadata endpoints by supplying a proxy address that bypasses the crawl-URL validation. Because the Docker API is unauthenticated by default and the SSRF check was only applied to the crawl target - not to the proxy destination - an attacker can route Chromium's egress through an internal IP (e.g. AWS IMDSv1 at 169.254.169.254) and read the response verbatim from the crawl result. No public exploit is identified at time of analysis, but the reporter supplied a working PoC and EPSS risk is low (0.29%, 20th percentile).
Technical ContextAI
Crawl4AI is a Python (pip) web-crawling/scraping framework that drives a headless Chromium browser, commonly deployed as a containerized Docker API service feeding LLM/RAG pipelines. The root cause is CWE-918 (Server-Side Request Forgery): the global-routability (is_global) destination check was enforced on the user-supplied crawl URL but not on the separate proxy configuration. Multiple inputs feed Chromium's egress and were unchecked - browser_config.proxy_config.server, the deprecated browser_config.proxy field, crawler_config.proxy_config.server, and the Chromium --proxy-server / --proxy-pac-url / --proxy-bypass-list / --host-resolver-rules flags passed via browser_config.extra_args. By pointing the proxy at an internal address while keeping a benign, validation-passing crawl URL, the browser's traffic is tunneled to attacker-chosen internal endpoints. The affected package is identified by CPE pkg:pip/crawl4ai.
RemediationAI
Vendor-released patch: upgrade to Crawl4AI 0.8.9, which validates every proxy destination with the same global-routability (is_global) check used for crawl URLs - rejecting non-global resolved addresses including IPv6 transition forms - and strips proxy/DNS-redirecting flags (--proxy-server, --proxy-pac-url, --proxy-bypass-list, --host-resolver-rules) from extra_args, while still honoring CRAWL4AI_ALLOW_INTERNAL_URLS for legitimate internal use. If immediate upgrade is not possible, enable authentication by setting CRAWL4AI_API_TOKEN so the Docker API is no longer unauthenticated (trade-off: all API clients must now present the token). Additionally, restrict the container's outbound network access with an egress firewall and remove the cloud-metadata route (e.g. block 169.254.169.254), which prevents the metadata-credential theft scenario but may break legitimate crawls that rely on those destinations. Advisory: https://github.com/unclecode/crawl4ai/security/advisories/GHSA-6qhc-x826-342c.
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac
Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post
Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build
Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config
Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l
Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c
Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2
An issue in Plone Docker Official Image 5.2.13 (5221) open-source software that could allow for remote code execution du
Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Rated critical seve
Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-38567
GHSA-6qhc-x826-342c