CVE-2026–17633 - Authenticated RCE in Langflow OSS via /api/v1/custom_component A security researcher detailed CVE-2026-17633, a high-severity authenticated remote code execution flaw in Langflow OSS versions 1.0.0 through 1.10.3, disclosed in an IBM security advisory published August 5, 2026. The vulnerability in the POST /api/v1/custom_component endpoint allows any authenticated user to execute arbitrary Python when custom components are enabled, because the endpoint's only gate checks whether the feature is turned on rather than inspecting code content, and its prepare_global_scope() function drops module-level expressions from the AST while executing statements placed inside a class body. The researcher noted the exploit requires no filter bypass, only placing the payload inside the class definition. | Field | Value | |---|---| | CVE ID | CVE-2026-17633 | | CVSS | 8.5 HIGH | | CWE | CWE-94 Improper Control of Generation of Code | | Affected | Langflow OSS 1.0.0 – 1.10.3 | | Preconditions | Any authenticated user + LANGFLOW ALLOW CUSTOM COMPONENTS=true | | Vulnerable endpoint | POST /api/v1/custom component | Langflow is an open-source low-code platform for building LLM applications and agent workflows visually. One of its features, Custom Components , lets users define a component's behavior directly in Python. That feature is the attack surface for this vulnerability. IBM's security advisory published August 5, 2026 disclosed a cluster of issues in Langflow OSS 1.0.0–1.10.3. CVE-2026–17633 is the authenticated RCE reachable through /api/v1/custom component . From langflow/api/v1/endpoints.py around line 1271 : @router.post "/custom component", status code=HTTPStatus.OK, include in schema=False async def custom component raw code: CustomComponentRequest, user: CurrentActiveUser, request: Request, - CustomComponentResponse: … The only gate: "is the custom-component feature enabled at all?" if not settings.allow custom components and not code hash matches any template raw code.code, all known : raise HTTPException status code=status.HTTP 403 FORBIDDEN, … scan code security is never called here component = Component code=effective code built frontend node, component instance = build custom component template component, user id=user.id The important detail isn't that there's "no validation" - it's that the validation checks the wrong thing. allow custom components answers "is this user allowed to create custom components," not "is this code's content safe." In production, LANGFLOW ALLOW CUSTOM COMPONENTS=true is a common setting, and once it's on, this check passes trivially and the code flows through with zero content inspection. Langflow does ship a separate AST-based scanner, scan code security covered in section 5 , but this endpoint's execution path never calls it. prepare global scope custom component calls build custom component template , which flows into create class in lfx/custom/validate.py . That function calls prepare global scope , and the submitted code is exec 'd shortly after. python def prepare global scope module : exec globals = globals .copy … for node in module.body: if isinstance node, ast.Import | ast.ImportFrom : imports.append node elif isinstance node, ast.ClassDef | ast.FunctionDef | ast.Assign | ast.AnnAssign : definitions.append node … if definitions: compiled code = compile combined module, "