GHSA-r253-r9jw-qg44: Crawl4AI: Unauthenticated RCE via Chromium launch-argument injection in browser_config.extra_args
Summary The Docker API server accepted a request-supplied browserconfig.extraargs, which flowed into Chromium's launch arguments. An attacker could inject Chromium switches that replace a child-process launch command (--utility-cmd-prefix, --renderer-cmd-prefix, --gpu-launcher, --browser-subprocess-path) together with --no-zygote, causing Chromium to fork/exec an attacker-controlled command as the container's…
Published Jun 18, 2026
Affected packages
crawl4ai
- Ecosystem
- PyPI
- Affected
- <= 0.8.9
- Fixed in
- 0.9.0
- Check
pip show crawl4ai
Advisory details
From the GitHub Advisory Database (CC BY 4.0).
Summary
The Docker API server accepted a request-supplied browser_config.extra_args, which flowed into Chromium's launch arguments. An attacker could inject Chromium switches that replace a child-process launch command (--utility-cmd-prefix, --renderer-cmd-prefix, --gpu-launcher, --browser-subprocess-path) together with --no-zygote, causing Chromium to fork/exec an attacker-controlled command as the container's runtime user. The Docker API is unauthenticated by default, so a single request yields arbitrary command execution.
The earlier extra_args SSRF patch (0.8.9) used a denylist scoped to proxy/DNS flags; a denylist of launch switches is inherently incomplete, and these command-execution switches were not covered.
Affected paths
/crawl, /crawl/stream, /crawl/job accepting a request browser_config.extra_args.
Impact
Unauthenticated remote code execution as the container runtime user; full read/write of application data, mounted secrets, environment, and tokens, and out-of-band exfiltration independent of the HTTP response.
Fix
0.9.0 establishes a trust boundary for request-supplied configuration: extra_args (along with other power fields such as proxy, user_data_dir, cdp_url, init_scripts) is a forbidden field for untrusted request bodies. Any request that sets extra_args is rejected with HTTP 400 rather than scrubbed against an always-incomplete denylist. In-process SDK callers (trusted) are unaffected.
Workarounds
- Upgrade to the patched version (0.9.0).
- Enable authentication (
CRAWL4AI_API_TOKEN) and restrict who can reach the API. - Run the container with a restrictive seccomp profile and no ability to exec helper binaries.
Credits
Y4tacker - reported the --no-zygote + --utility-cmd-prefix command-injection chain with a confirmed in-container PoC and an allowlist/reject recommendation. UDU_RisePho (hoanggxyuuki) - independently reported the request-supplied Chromium launch-flag RCE class (--renderer-cmd-prefix), confirmed still reproducing on 0.8.9.
Credited to hoanggxyuuki.
References
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. No analysis has been written for this entry yet. Methodology
More PyPI vulnerabilities
All PyPI entriesCVE-2026-56265
Crawl4AI: authentication bypass vulnerability due to a hardcoded default JWT signing key in the Docker API server
critical9.8Jun 21, 2026GHSA-2jq4-q6vv-4cp3
Crawl4AI: Arbitrary file write (path traversal) in crawler downloads can lead to RCE
critical9.6Jun 18, 2026CVE-2026-53753
Crawl4AI: AST Sandbox Escape via gi_frame.f_back Chain - Pre-Auth RCE in Docker API
critical9.8Jun 16, 2026CVE-2026-56266
Crawl4AI: Multiple Docker API Vulnerabilities - File Write, SSRF, Auth Bypass, XSS, JS Execution
critical9.8Jun 16, 2026CVE-2026-26217
Crawl4AI Has Local File Inclusion in Docker API via file:// URLs
critical8.6Jan 16, 2026
