CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-R253-R9JW-QG44

GHSA-R253-R9JW-QG44: Unauthenticated Remote Code Execution in Crawl4AI via Chromium Launch-Argument Injection

Alon Barad
Alon Barad
Software Engineer

Jun 18, 2026·6 min read·18 visits

Executive Summary (TL;DR)

Unauthenticated remote command injection via Chromium process-replacement switches in Crawl4AI <= 0.8.9.

A critical unauthenticated remote code execution vulnerability exists in Crawl4AI versions up to 0.8.9. The flaw is caused by improper neutralization of command arguments passed to the Chromium process execution engine via the browser_config.extra_args parameter, enabling remote attackers to execute arbitrary shell commands inside the container.

Vulnerability Overview

Crawl4AI is an open-source, LLM-friendly web crawling and scraping library designed to be deployed as a self-hosted API server within Docker containers. To orchestrate headless browsing, Crawl4AI relies on Playwright to spawn instances of Chromium. The API server exposes several endpoints, such as /crawl, /crawl/stream, and /crawl/job, which allow remote users to configure and trigger crawling sessions.

In versions up to and including 0.8.9, the API server was unauthenticated by default. It accepted a JSON payload containing a BrowserConfig object. This object included an optional extra_args parameter designed to allow users to supply custom arguments to the Chromium browser process.

Because the API did not validate or restrict these arguments, remote unauthenticated attackers could inject specific command-line switches. This allowed the execution of arbitrary shell commands within the Docker container, bypassing intended boundaries.

Root Cause Analysis

The root cause of this vulnerability lies in the combination of CWE-88 (Improper Neutralization of Argument Delimiters in a Command) and CWE-94 (Improper Control of Generation of Code). The Crawl4AI API server deserialized incoming JSON payloads directly into configuration models without validating the safety of the keys or values within browser_config.extra_args.

When a crawl task is initiated, the application constructs a command to spawn Chromium via Playwright, appending the elements of extra_args directly to the command-line parameters. Chromium features several diagnostic switches that specify the path of helper binaries or prefix execution commands for subprocesses. Attackers can leverage these switches to hijack process execution.

By supplying arguments such as --utility-cmd-prefix or --renderer-cmd-prefix alongside --no-zygote, the attacker instructs the parent Chromium process to prepend a custom command wrapper whenever it spawns a helper utility or renderer process. Consequently, when Chromium forks to initialize these processes, it executes the injected shell command instead of or before the standard executable. This design flaw allows input data to influence the executable control path of the host system.

Code-Level Patch Analysis

To address this vulnerability, the development team introduced a strict trust-boundary model in version 0.9.0, implemented in commit 60886d1a0c52682e4c83a7cef9dfac417fff6bd2. The patch defines two levels of configuration trust: TRUSTED for local Python SDK calls and UNTRUSTED for external network-facing API requests.

# Inside crawl4ai/async_configs.py
class Provenance(Enum):
    TRUSTED = "trusted"
    UNTRUSTED = "untrusted"

The implementation restricts several critical parameters. Any configuration received via an untrusted request that includes blocked parameters, such as extra_args, raises an explicit UntrustedConfigError.

# Forbidden fields for untrusted network requests
UNTRUSTED_FORBIDDEN_FIELDS = {
    "BrowserConfig": {
        "proxy", "proxy_config", "extra_args", "user_data_dir", "channel",
        "chrome_channel", "cdp_url", "debugging_port", "host", "storage_state",
        "cookies", "headers", "init_scripts", "browser_context_id", "target_id",
    },
    "CrawlerRunConfig": {
        "js_code", "js_code_before_wait", "c4a_script", "deep_crawl_strategy",
        "proxy_config", "proxy_rotation_strategy", "proxy_session_id",
        "proxy_session_ttl", "proxy_session_auto_release",
        "fallback_fetch_function", "experimental", "base_url", "simulate_user",
        "override_navigator", "magic", "process_in_browser", "shared_data",
        "session_id",
    },
}

This approach ensures that potentially dangerous settings cannot be manipulated by external payloads. The API server returns a 400 Bad Request error if a forbidden field is detected, preventing argument injection or code execution via the network API. The architecture decouples internal process-level options from network-accessible interfaces, establishing a robust security barrier.

Exploitation Methodology

An attack is initiated by submitting an unauthenticated HTTP POST request to /crawl or related endpoints on an exposed Crawl4AI API instance. The payload must target the browser_config.extra_args array to supply the malicious Chromium parameters. Because the API server does not require authentication in its default configuration, any network-adjacent attacker can reach these endpoints.

The attack leverages the --no-zygote flag to disable the standard Chromium process template system. This forces the browser to spawn individual helper processes directly, facilitating the invocation of the command execution prefixes. The attacker specifies the target command inside parameters like --utility-cmd-prefix or --renderer-cmd-prefix.

{
  "url": "https://example.com",
  "browser_config": {
    "extra_args": [
      "--no-zygote",
      "--utility-cmd-prefix=bash -c 'id > /tmp/rce_proof'"
    ]
  }
}

When the application processes this crawl request, Playwright launches Chromium with the specified arguments. Chromium then executes the prefix value using the system shell, running the command under the privileges of the container's runtime user. This allows full command execution within the context of the running container.

Impact Assessment

The security impact of this vulnerability is critical, as reflected in its CVSS score of 10.0. Successful exploitation yields immediate, unauthenticated remote code execution with the privileges of the container's executing user (typically appuser or root).

Once code execution is achieved, an attacker can access the container's file system, environment variables, and any integrated secrets or API keys used by the application. This could expose external database credentials, LLM API tokens, or cloud service credentials, depending on how the container environment is configured.

Additionally, because the compromised process runs inside a container, the attacker can attempt to perform lateral movement or network scanning against internal resources accessible from the container network. While the container context limits direct access to the host kernel, typical container escapes or environment compromises remain potential secondary vectors.

Remediation and Detection

The primary remediation path is to upgrade Crawl4AI to version 0.9.0 or later. This version implements the necessary trust boundary checks, preventing the usage of extra_args via the API endpoints.

For environments where an immediate upgrade is not feasible, security administrators should configure the CRAWL4AI_API_TOKEN environment variable. This enforces token-based authentication on all API routes, limiting exposure to authenticated clients. Access to the API port (default 11235) should also be restricted using network firewalls or bound specifically to localhost.

Detection can be accomplished by monitoring container process creation events. Security logs should be analyzed for instances where chrome or chromium processes spawn shells such as /bin/sh or /bin/bash as child processes. Network intrusion detection rules can also scan incoming API traffic for payloads containing forbidden flags like --utility-cmd-prefix or --renderer-cmd-prefix.

Technical Appendix

CVSS Score
10.0/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Affected Systems

Crawl4AI self-hosted Docker API server
AttributeDetail
CWE IDCWE-88 / CWE-94
Attack VectorNetwork
CVSS Score10.0 (Critical)
Exploit StatusPoC Available
Affected ComponentDocker API server request parsing
Patched Version0.9.0
CWE-88
Improper Neutralization of Argument Delimiters in a Command ('Argument Injection')

The software constructs a command line for an external execution using input parameters, but fails to prevent input from adding additional arguments or modifying existing ones.

Vulnerability Timeline

Release of version 0.8.9 resolving partial proxy SSRF issues
2026-06-04
Public disclosure of GHSA-R253-R9JW-QG44
2026-06-18
Release of version 0.9.0 introducing network trust boundaries
2026-06-18

References & Sources

  • [1]GitHub Security Advisory GHSA-R253-R9JW-QG44
  • [2]Crawl4AI Repository
  • [3]Vulnerability Fix Commit
  • [4]Vulnerability Documentation Commit
  • [5]Crawl4AI Migration Guide (0.9.0)

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 5 hours ago•GHSA-5648-RGJ9-V224
8.1

GHSA-5648-RGJ9-V224: Multiple Security Control Bypasses in @zereight/mcp-gitlab

A constellation of five distinct security flaws (F1 through F5) in `@zereight/mcp-gitlab` prior to version 2.1.30 allows unauthenticated remote access, read-only policy bypasses, DNS rebinding, and denial-of-service via session exhaustion.

Alon Barad
Alon Barad
3 views•6 min read
•about 6 hours ago•CVE-2026-61568
9.6

CVE-2026-61568: DNS Rebinding Vulnerability in @zereight/mcp-gitlab Streamable HTTP Transport

A critical security vulnerability has been identified in the @zereight/mcp-gitlab implementation of the Model Context Protocol (MCP) server. Prior to version 2.1.30, the server lacks HTTP Host and Origin header validation on its Streamable HTTP transport interface (/mcp). This security omission permits remote attackers to bypass the Same-Origin Policy (SOP) via a DNS Rebinding attack. Under this vector, an attacker can route malicious API requests to the victim's local or internal MCP server, thereby gaining unauthorized control over the victim's GitLab account and resources.

Alon Barad
Alon Barad
8 views•9 min read
•about 7 hours ago•CVE-2026-61559
9.6

CVE-2026-61559: Critical Server-Side Request Forgery and Token Leakage in @zereight/mcp-gitlab

A critical Server-Side Request Forgery (SSRF) vulnerability in @zereight/mcp-gitlab allows attackers to leak sensitive GitLab Private-Tokens by supplying an arbitrary external hostname via the X-GitLab-API-URL header when dynamic routing is enabled.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 8 hours ago•CVE-2026-69208
7.5

CVE-2026-69208: Memory Leak and Denial of Service in http4s DigestAuth Middleware

A critical memory leak vulnerability exists in the server-side DigestAuth middleware of the http4s library. Due to a logical inversion in the stale-nonce clean-up routine, the internal cache fails to evict stale nonces while prematurely purging fresh ones. Unauthenticated remote attackers can exploit this behavior by repeatedly prompting the server for authentication challenges, leading to unbounded memory consumption and application crashes via a java.lang.OutOfMemoryError.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 9 hours ago•CVE-2026-56830
6.5

CVE-2026-56830: Broken Function Level Authorization in Shopper Media Component

An incomplete security fix in Shopper prior to version 2.9.2 exposes a Broken Function Level Authorization (BFLA) vulnerability in the Media component. Low-privileged administrative users with 'browse_products' permissions can bypass role-based access control policies to execute the 'store' action and modify product media.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 10 hours ago•CVE-2026-56825
8.1

CVE-2026-56825: Missing Authorization and State Tampering in Shopper e-commerce Admin Panel

A critical authorization bypass and insecure direct object reference (IDOR) vulnerability was discovered in Shopper, a Headless e-commerce Admin Panel. Due to missing authorization chains on table actions and the lack of a locked property on the collection state model, authenticated low-privilege staff can detach products from arbitrary collections.

Alon Barad
Alon Barad
4 views•9 min read