CVE-2026-10561Critical· 9.9▾ MidnightLangflow: PythonREPLComponent executes unsandboxed Python code, enabling authenticated RCE and privilege escalation
▾ Midnight zone — Critical, or high with PoC / in-the-wild
impact 54.5 · likelihood 0.2 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via GHSA
1.0%
Langflow's built-in Python interpreter components — PythonREPLComponent (Python Interpreter) and the legacy PythonREPLToolComponent (Python REPL Tool) — executed arbitrary user- or model-supplied Python code inside flows without effective sandboxing. Because the code ran in-process with the privileges of the Langflow service, any authenticated user who could edit and run a flow could achieve remote code execution and, from there, escalate privileges to superuser (e.g. by opening a database session and flipping is_superuser) or compromise the host.
This issue is fixed as of 1.10.1, with additional hardening through 1.12.3. See Remediation below.
langflow (PyPI), and the underlying lfx package that ships the component.< 1.10.1.1.10.1 (core fix). Upgrade to >= 1.12.3 for the complete hardening series.The root cause is code injection (CWE-94/CWE-95): the component passed raw input to LangChain's PythonREPL, which is explicitly not a security sandbox.
Two distinct weaknesses existed before 1.10.1:
Unrestricted builtins (default deployments). get_globals() built the exec globals from the global_imports allow-list but never set __builtins__. CPython's exec() then auto-injected the full builtins module, leaving __import__, open, eval, exec and the whole import machinery reachable regardless of the allow-list — e.g. __import__("os").system(...) or __import__("subprocess").check_output([...]). This made the "only modules in Global Imports can be used" guarantee false, and it applied even with the default configuration (allow_custom_components=True).
No server-policy gate (locked-down deployments). Even a deployment hardened with allow_custom_components=False could still run interpreter code, because the components did not consult that policy before executing.
Both let an authenticated user run the reported PoC, which opens a DB session and sets is_superuser = True on their account, or writes to the filesystem / runs OS commands with the service's privileges.
PythonREPLComponent.import asyncio
from sqlmodel import select
from langflow.services.database.models.user.model import User
from langflow.services.deps import session_scope
async def escalate():
async with session_scope() as session:
stmt = select(User).where(User.username == 'testuser')
user = (await session.exec(stmt)).first()
if user:
user.is_superuser = True
session.add(user)
await session.commit()
asyncio.run(escalate())
Any authenticated user could:
Upgrade to Langflow 1.10.1 or later (preferably >= 1.12.3). The interpreter components were hardened with layered, defense-in-depth controls, applied in run_python_repl() before any code is executed:
get_globals() injects a curated safe_builtins() mapping, removing __import__, eval, exec, compile, open, input, globals/locals/vars, getattr/setattr, etc. (#13397)validate_code_safety() rejects inline import/from ... import, dunder/escape-gadget attribute access (__class__, __subclasses__, __globals__, frame/traceback introspection) and format-string dunder traversal. (#13397)ensure_code_execution_enabled() refuses to run when allow_custom_components=False or block_code_interpreter_components=True, and fails closed if the settings stack cannot be resolved. (#13700 — this advisory — and #14375)sys.modules["os"] through a module's transitive import graph. (#15198)LANGFLOW_SANDBOX_BACKEND to run interpreter code in an isolated microVM instead of in-process. (#14400)Upstream fix references: #13397, #13700 (carries this GHSA), #14375, #14400, #15198.
LANGFLOW_ALLOW_CUSTOM_COMPONENTS=false (or LANGFLOW_BLOCK_CODE_INTERPRETER_COMPONENTS=true) to disable the interpreter entirely.LANGFLOW_SANDBOX_BACKEND for microVM isolation.langflow < 1.10.1Upgrade to a patched release:
langflow 1.10.1Connected by shared product, vendor, weakness, or advisory.
CVE-2026-51886Critical· 9.8langflow-ai langflow v1.9.3 is affected by: Code Injection
CVE-2026-101861Medium· 4.1Langflow 1.0.16 before 1.12.0 and 0.0.94 before 1.12.0 contain an unsafe eval() vulnerability in schema.py that allows authenticated attackers to achieve code execution by placing a Python object with a malicious __repr__ method into com…
CVE-2026-7700Medium· 6.3A weakness has been identified in langflow-ai langflow up to 1.10.2
CVE-2026-48519Critical· 9.6Langflow: Unauthenticated RCE in Shareable Playgrounds
CVE-2026-105698Medium· 5.4Langflow is a tool for building and deploying AI-powered agents and workflows
CVE-2026-78571High· 8.8IBM Langflow OSS 1.0.0 through 1.11.5 could allow a remote authenticated attacker to execute arbitrary code due to an unguarded eval() call on attacker-controlled input.