CVE-2026-105697 json
Langflow: OS command injection (RCE) via arbitrary command in MCP stdio server configuration
published 2026-10-05 34 d ago modified 2026-10-15 24 d ago also GHSA-w794-rj3p-xv45 , PYSEC-2026-4237 , PYSEC-2026-4239 , PYSEC-2026-4241 , EUVD-2026-92788
- cvss
- 9.9
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.9%
- EPSS 0.9% chance of exploitation in 30 days, percentile 61%
- public exploits
- 0
- none known
Summary
Langflow is a tool for building and deploying AI-powered agents and workflows. Before Langflow 1.10.3, the MCP stdio transport launched whatever command / args a user put in an MCP server configuration, with no allowlist and (before 1.10.3) wrapped in bash -c "exec {command} ...". Any user able to reach the MCP server settings ("Settings → MCP Servers → Add MCP Server", POST/PATCH /api/v2/mcp/servers/{server_name}) or to build a flow with the MCP Tools component could add a "server" whose command is an arbitrary OS command (touch, rm -rf, a reverse shell, ...). The command runs on the Langflow host as the Langflow process user as soon as Langflow tries to connect to the server (listing servers, loading tools, running the flow) — even when the UI then reports that the stdio server failed to start. With the default LANGFLOW_AUTO_LOGIN=true, GET /api/v1/auto_login hands out a token without credentials, so on an exposed instance running the default configuration this is reachable without an account. AUTO_LOGIN is documented as a development-only setting; with it disabled, any authenticated (non-admin) user can exploit it. This issue is fixed in Langflow 1.10.3, langflow-base 0.10.3, and lfx 1.10.3.
Patch / fix
- pypi langflow 1.10.3
- pypi langflow-base 0.10.3
- pypi lfx 1.10.3
- github.com/langflow-ai/langflow@eba285e commit
- github.com/langflow-ai/langflow@efbc4a1 commit
- github.com/langflow-ai/langflow#12290 pull request
- github.com/langflow-ai/langflow#14036 pull request
- github.com/langflow-ai/langflow/releases/tag/v1.10.3 release
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- total
- Assessed
- 33 d ago
Exploit prediction
0.95% chance of exploitation in the next 30 days, higher than 61% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 9.9 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| OSV | 3.1 | 9.9 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| GitHub | 3.1 | 9.9 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| pypi | langflow | >=1.1.2, <1.10.3 |
1.10.3 |
| pypi | langflow-base | >=0.1.2, <0.10.3 |
0.10.3 |
| pypi | lfx | <1.10.3 |
1.10.3 |
Affected products
- langflow-ai langflow
- langflow-ai langflow-base
- langflow-ai lfx
Classification
- Weakness
-
- CWE-78 Improper Neutralization of Special Elements used in an OS Command
References
-
github.com
/langflow-ai/langflow/pull/12290
web
-
github.com
/langflow-ai/langflow/pull/14036
web
-
github.com
/langflow-ai/langflow/commit/eba285edf1dd4a33bf23a9cb8113c991fcdf3d1d
web
-
github.com
/langflow-ai/langflow/commit/efbc4a16e639409d938a4883463d27ef0bc637a0
web
-
github.com
/langflow-ai/langflow/security/advisories/GHSA-w794-rj3p-xv45
web
-
github.com
/langflow-ai/langflow/security/advisories/GHSA-7w94-79vh-5mr2
web
-
github.com
/langflow-ai/langflow/releases/tag/v1.10.3
web
-
ox.security
/blog/mcp-supply-chain-advisory-rce-vulnerabilities-across-the-ai-ecosystem
web
-
ox.security
/blog/the-mother-of-all-ai-supply-chains-critical-systemic-vulnerability-at-the-core-of-the-mcp
web
-
nvd.nist.gov
/vuln/detail/CVE-2026-105697
advisory
-
github.com
/langflow-ai/langflow
package
-
pypi.org
/project/langflow-base
package
-
github.com
/advisories/GHSA-w794-rj3p-xv45
advisory
-
pypi.org
/project/langflow
package
-
pypi.org
/project/lfx
package
Sources
- CVE List CVE-2026-105697
- GitHub Advisory GHSA-w794-rj3p-xv45
- NVD CVE-2026-105697
- OSV PYSEC-2026-4239
- OSV PYSEC-2026-4237
- OSV PYSEC-2026-4241
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.