[2026.07 Vulnerability Report] Langflow Remote Code Execution Vulnerability (CVE-2026-33017)
CVE-2026-33017 is a critical (CVSS 9.8) unauthenticated remote code execution (RCE) vulnerability in Langflow, an open-source framework for building LLM and RAG pipelines. The flaw exists in the POST /api/v1/build_public_tmp/{flow_id}/flow endpoint, which is designed to allow unauthenticated access for public flows but improperly accepts attacker-controlled data from the request body instead of using server-stored flow definitions. This data is used to construct a Custom Component—an extensible block where users define behavior in Python. The Python code embedded in this component is then executed via `exec()` without any sandboxing or validation, allowing attackers to run arbitrary code on the server with a single HTTP request. Since Langflow stores various cloud provider credentials and API keys, exploitation can escalate beyond server compromise to lateral movement across cloud infrastructures and supply chain attacks. The vulnerability was first publicly disclosed on March 16, 2026, and active exploitation was observed within approximately 20 hours of disclosure. It has been assigned a CVSS v3.1 score of 9.8 (Critical) by the NVD and was added to the CISA KEV catalog on March 25, 2026. Users must immediately upgrade from affected versions (prior to 1.9.0) to version 1.9.0 or later. — 1. Overview CVE-2026-33017 is a Critical-severity remote code execution (RCE) vulnerability discovered in Langflow, an open-source framework that allows users to visually configure LLM and RAG (Retrieval-Augmented Generation) pipelines. This vulnerability occurs in the POST /api/v1/build_public_tmp/{flow_id}/flow endpoint, which allows unauthenticated access for building public flows. By design, this endpoint should only use flow definitions stored on the server; however, in the actual implementation, it accepts the attacker-controlled `data` field included in the request body as-is. This data is used to configure Custom Components, which allow users to define behaviors directly using Python code; the Python code contained within these components is executed via `exec()` without any separate sandbox or validation. As a result, an attacker can execute arbitrary code on the server with a single HTTP request, without valid credentials. Langflow is an orchestration platform that connects AI models to production data, databases, external services, and internal APIs; by its very nature, it holds a large number of cloud provider credentials and various third-party API keys. Therefore, if this vulnerability is exploited, it could lead not only to server compromise but also to lateral movement into connected cloud infrastructure and supply chain breaches. This vulnerability was first disclosed on March 16, 2026, and actual exploitation was observed approximately 20 hours after disclosure. It was assigned a CVSS v3.1 score of 9.8 (Critical) by the NVD and was added to the CISA KEV catalog on March 25, 2026.Affected versions are those prior to Langflow 1.9.0, and the vendor and security advisories recommend immediately updating to version 1.9.0 or later. — 2. Attack Vector CVE-2026-33017 is an unauthenticated remote code execution vulnerability occurring in Langflow’s public flow build endpoint: POST /api/v1/build_public_tmp/{flow_id}/flow. Although this endpoint is designed to allow the building of public flows without authentication, in vulnerable versions, it accepts attacker-controlled data contained in the `data` field of the request body as-is, rather than using the flow definition stored on the server. Below is the actual code for the vulnerable endpoint, which shows that it directly receives the `data` parameter from the request body. @router.post(“/build_public_tmp/{flow_id}/flow”) async def build_public_tmp( *, flow_id: uuid.UUID, data: Annotated[FlowDataRequest | None, Body(embed=True)] = None, # ATTACKER CONTROLLED request: Request, # … NO Depends(get_current_active_user) — MISSING AUTH … ): “””Build a public flow without requiring authentication.””” client_id = request.cookies.get(“client_id”) owner_user, new_flow_id = await verify_public_flow_and_get_user(flow_id=flow_id, client_id=client_id) job_id Read more about [2026.07 Vulnerability Report] Langflow Remote Code Execution Vulnerability (CVE-2026-33017)[…]
