VYPR
High severity7.5GHSA Advisory· Published Jun 16, 2026· Updated Jun 16, 2026

Crawl4AI: SSRF filter bypass in Docker server via IPv6 transition forms (NAT64 / 6to4 / unspecified / v4-mapped)

CVE-2026-53754

Description

Crawl4AI Docker API SSRF filter bypass via IPv6 transition addresses, allowing unauthenticated access to internal services and cloud metadata.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Crawl4AI Docker API SSRF filter bypass via IPv6 transition addresses, allowing unauthenticated access to internal services and cloud metadata.

Vulnerability

The SSRF protection in validate_webhook_url/validate_url_destination in deploy/docker/utils.py used an explicit CIDR blocklist that missed several address families. An attacker can bypass the filter by encoding internal IPv4 addresses inside IPv6 transition forms (e.g., NAT64 64:ff9b::a9fe:a9fe, 6to4 2002:a9fe:a9fe::, IPv4-mapped ::ffff:169.254.169.254, IPv4-compatible ::a9fe:a9fe, or the IPv6 unspecified address ::). The blocklist is applied to crawl endpoints (POST /crawl, /md, /html, /screenshot, /pdf, /execute_js) and webhook URLs (/crawl/job, /llm/job). All affected versions prior to the fix are vulnerable [1][2].

Exploitation

The Docker API is unauthenticated by default (jwt_enabled: false), so no credentials are required. An attacker sends a crafted request to any of the affected endpoints with a URL containing an IPv6 transition form that resolves to an internal address (e.g., 169.254.169.254). The server's blocklist does not catch these forms, allowing the request to proceed. The error message also echoed the resolved internal IP, providing an oracle for DNS/internal network enumeration [1][2].

Impact

Successful exploitation enables Server-Side Request Forgery (SSRF). An unauthenticated attacker can make the server fetch internal-network URLs and cloud instance-metadata endpoints (e.g., http://169.254.169.254/), potentially exposing internal services and cloud credentials [1][2].

Mitigation

The fix replaces the blocklist with 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. Users should upgrade to the patched version. Workarounds include enabling authentication (CRAWL4AI_API_TOKEN) and restricting container outbound network access via egress firewall or no metadata route [1][2].

AI Insight generated on Jun 16, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected products

1

Patches

0

No patches discovered yet.

Vulnerability mechanics

Root cause

"The SSRF blocklist used explicit CIDR ranges that missed IPv6 transition forms (NAT64, 6to4, v4-mapped, v4-compatible) and the IPv6 unspecified address."

Attack vector

An unauthenticated attacker sends a crafted URL to any of the affected API endpoints, encoding an internal IPv4 address (e.g., `169.254.169.254`) inside an IPv6 transition form such as NAT64 (`64:ff9b::a9fe:a9fe`), 6to4 (`2002:a9fe:a9fe::`), IPv4-mapped (`::ffff:169.254.169.254`), IPv4-compatible (`::a9fe:a9fe`), or the IPv6 unspecified address (`::`) [ref_id=1][ref_id=2]. Because the Docker API is unauthenticated by default (`jwt_enabled: false`), no credentials are required. The server resolves the address and fetches the internal resource, bypassing the blocklist.

Affected code

The SSRF protection functions `validate_webhook_url` and `validate_url_destination` in `deploy/docker/utils.py` used an explicit IPv4/IPv6 CIDR blocklist that missed several address families [ref_id=1][ref_id=2]. The blocklist was applied to crawl endpoints (`POST /crawl`, `/md`, `/html`, `/screenshot`, `/pdf`, `/execute_js`) and webhook endpoints (`/crawl/job`, `/llm/job`), all sharing the same incomplete check.

What the fix does

The patch replaces the explicit CIDR blocklist with a single rule that rejects 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`) [ref_id=1][ref_id=2]. Error messages are now opaque and no longer echo the resolved IP, closing the DNS/oracle leak.

Preconditions

  • networkThe Docker API must be accessible over the network
  • authAuthentication must be disabled (jwt_enabled: false, the default)
  • inputThe attacker must be able to send HTTP requests to the API endpoints

Generated on Jun 16, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

2

News mentions

0

No linked articles in our index yet.