Skip to main content

Crawl4AI CVE-2026-53754

| EUVDEUVD-2026-38568 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-06-16 https://github.com/unclecode/crawl4ai GHSA-4qqr-vv2q-cmr5
7.5
CVSS 3.1 · Vendor: https://github.com/unclecode/crawl4ai
Share

Severity by source

Vendor (https://github.com/unclecode/crawl4ai) PRIMARY
7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI
7.5 HIGH

Network-reachable unauthenticated Docker API (PR:N, AV:N, AC:L); SSRF to IMDS yields high confidentiality via credential theft, but no direct write or DoS, so I:N and A:N.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/unclecode/crawl4ai).

CVSS VectorVendor: https://github.com/unclecode/crawl4ai

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

3
Source Code Evidence Fetched
Jun 16, 2026 - 21:43 vuln.today
Analysis Generated
Jun 16, 2026 - 21:43 vuln.today
CVE Published
Jun 16, 2026 - 21:00 github-advisory
HIGH 7.5

DescriptionCVE.org

Summary

The Docker API server's SSRF protection (validate_webhook_url / validate_url_destination in deploy/docker/utils.py) used an explicit IPv4/IPv6 CIDR blocklist that missed several address families. An attacker could reach internal services and cloud metadata endpoints (e.g. 169.254.169.254) despite the filter by encoding an internal IPv4 address inside an IPv6 transition form, or by using the IPv6 unspecified address.

Because the Docker API is unauthenticated by default (jwt_enabled: false), no credentials are required.

Affected paths

The blocklist was applied to crawl URLs (POST /crawl, /md, /html, /screenshot, /pdf, /execute_js) and webhook URLs (/crawl/job, /llm/job). All shared the same incomplete check.

Bypasses

The following all resolve to (or route to) blocked internal addresses but were NOT caught:

  • IPv6 unspecified ::
  • NAT64 64:ff9b::a9fe:a9fe (embeds 169.254.169.254)
  • 6to4 2002:a9fe:a9fe:: (embeds 169.254.169.254)
  • IPv4-mapped ::ffff:169.254.169.254
  • IPv4-compatible ::a9fe:a9fe

The error message also echoed the resolved internal IP, acting as a minor DNS/oracle leak.

Impact

Server-Side Request Forgery: an unauthenticated attacker can make the server fetch internal-network URLs and cloud instance-metadata endpoints, potentially exposing internal services and cloud credentials.

Fix

The blocklist is replaced by a single rule: reject any resolved IP where not ip.is_global, evaluated on the address AND every embedded IPv4 transition form (v4-mapped, NAT64 64:ff9b::/96, 6to4 2002::/16, v4-compat ::/96). Error messages are now opaque and no longer echo the resolved IP.

Workarounds

  • Upgrade to the patched version.
  • Enable authentication (CRAWL4AI_API_TOKEN).
  • Restrict the container's outbound network access (egress firewall / no metadata route).

Credits

Internal security audit (Crawl4AI maintainers).

AnalysisAI

Server-Side Request Forgery in Crawl4AI's Docker API server (versions <= 0.8.7) allows unauthenticated remote attackers to bypass the IPv4/IPv6 CIDR blocklist in validate_webhook_url/validate_url_destination by using IPv6 transition forms (NAT64, 6to4, IPv4-mapped, IPv4-compatible) or the unspecified address. Since the Docker API ships with jwt_enabled:false by default, attackers can pivot the server into fetching cloud metadata endpoints like 169.254.169.254, potentially exposing IAM credentials. No public exploit identified at time of analysis, but the upstream advisory (GHSA-4qqr-vv2q-cmr5) details the exact bypass payloads.

Technical ContextAI

Crawl4AI is an open-source Python web-crawling framework (pkg:pip/crawl4ai) commonly deployed via its Docker API service for LLM/agent pipelines. The vulnerable logic in deploy/docker/utils.py applied an explicit deny-list of internal CIDR ranges, but the SSRF defense (CWE-918) failed to account for IPv6 address family semantics where an IPv4 address can be embedded inside an IPv6 representation (::ffff:169.254.169.254, 64:ff9b::a9fe:a9fe, 2002:a9fe:a9fe::, ::a9fe:a9fe) and still route to the original IPv4 destination. The unspecified IPv6 address :: also bypassed checks. The endpoints affected are the crawl actions (/crawl, /md, /html, /screenshot, /pdf, /execute_js) and webhook URL inputs on /crawl/job and /llm/job. The fix replaces the blocklist with Python's stdlib ipaddress is_global check, evaluated against the resolved address and every embedded transition form.

RemediationAI

Vendor-released patch: upgrade pip/crawl4ai to 0.8.8 or later, which replaces the explicit CIDR blocklist with an ipaddress.is_global check evaluated across all IPv6 transition encodings (v4-mapped, NAT64 64:ff9b::/96, 6to4 2002::/16, v4-compat ::/96) and also makes error messages opaque to remove the DNS/oracle leak; see https://github.com/unclecode/crawl4ai/security/advisories/GHSA-4qqr-vv2q-cmr5. If immediate upgrade is not feasible, enable authentication by setting CRAWL4AI_API_TOKEN and switching jwt_enabled to true (this blocks unauthenticated callers but breaks any clients that do not pass the token). As a network-level compensating control, restrict the container's outbound traffic with an egress firewall that drops 169.254.169.254 and RFC1918/internal ranges, or run the container in a network namespace without a route to the cloud IMDS - be aware this can break legitimate webhook destinations that legitimately live on internal networks.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

CVE-2025-34221 CRITICAL POC
10.0 Sep 29

Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2

CVE-2024-23054 CRITICAL POC
9.8 Feb 05

An issue in Plone Docker Official Image 5.2.13 (5221) open-source software that could allow for remote code execution du

CVE-2025-23211 CRITICAL POC
9.9 Jan 28

Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Rated critical seve

Share

CVE-2026-53754 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy