Skip to content

Commit afd4e7d

Browse files
authored
Merge branch 'release-1.9.2' into docs-deployments-endpoints-add-telemetry
2 parents 62bea6a + d965a3a commit afd4e7d

53 files changed

Lines changed: 1775 additions & 210 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.secrets.baseline

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7795,7 +7795,7 @@
77957795
"filename": "src/lfx/src/lfx/base/models/unified_models/model_catalog.py",
77967796
"hashed_secret": "d4c3d66fd0c38547a3c7a4c6bdc29c36911bc030",
77977797
"is_verified": false,
7798-
"line_number": 306
7798+
"line_number": 307
77997799
}
78007800
],
78017801
"src/lfx/src/lfx/cli/serve_app.py": [
@@ -8245,5 +8245,5 @@
82458245
}
82468246
]
82478247
},
8248-
"generated_at": "2026-04-23T21:12:19Z"
8248+
"generated_at": "2026-04-24T19:11:48Z"
82498249
}

docs/versioned_docs/version-1.9.0/Deployment/deployment-wxo.mdx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ import Tabs from '@theme/Tabs';
88
import TabItem from '@theme/TabItem';
99
import PartialGlobalModelProviders from '@site/docs/_partial-global-model-providers.mdx';
1010

11+
:::tip
12+
As of Langflow 1.9.2, the IBM watsonx Orchestrate deployments feature is behind a feature flag. To enable it, set the following environment variable before starting Langflow:
13+
14+
```bash
15+
LANGFLOW_FEATURE_WXO_DEPLOYMENTS=true
16+
```
17+
:::
18+
1119
Create a flow and deploy it to [IBM watsonx Orchestrate](https://www.ibm.com/docs/en/watsonx/watson-orchestrate/base?topic=getting-started-watsonx-orchestrate).
1220

1321
Deploying a flow on IBM watsonx Orchestrate is different from the other Langflow deployment options.

docs/versioned_docs/version-1.9.0/Support/release-notes.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ For all changes, see the [Changelog](https://github.com/langflow-ai/langflow/rel
112112
This workflow packages a selected flow version for use in IBM watsonx Orchestrate.
113113
For more information, see [Deploy Langflow on watsonx Orchestrate](../Deployment/deployment-wxo.mdx).
114114

115+
As of Langflow 1.9.2, this feature is behind a feature flag. To enable it, set `LANGFLOW_FEATURE_WXO_DEPLOYMENTS=true` before starting Langflow.
116+
115117
- **Policies** component (beta)
116118

117119
The **Policies** component uses [ToolGuard](https://github.com/AgentToolkit/toolguard) to generate guard code from natural-language business policies and apply it to agent tools.

src/backend/base/langflow/api/utils/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
build_graph_from_db,
4444
build_graph_from_db_no_cache,
4545
cascade_delete_flow,
46+
scope_session_to_namespace,
4647
verify_public_flow_and_get_user,
4748
)
4849

@@ -85,6 +86,7 @@
8586
"parse_value",
8687
"raise_error_if_astra_cloud_env",
8788
"remove_api_keys",
89+
"scope_session_to_namespace",
8890
"validate_is_component",
8991
"verify_public_flow_and_get_user",
9092
]

src/backend/base/langflow/api/utils/flow_utils.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,26 @@ def compute_virtual_flow_id(identifier: str | uuid.UUID, flow_id: uuid.UUID) ->
135135
return uuid.uuid5(uuid.NAMESPACE_DNS, f"{identifier}_{flow_id}")
136136

137137

138+
def scope_session_to_namespace(session: str | None, namespace: str) -> str | None:
139+
"""Wrap a caller-supplied session ID under a (client_id, flow_id) namespace.
140+
141+
Mitigates CVE-2026-33017: an unauthenticated public-flow caller cannot
142+
address a session that lives outside its own namespace through a Memory
143+
component, regardless of whether the caller supplies a non-empty,
144+
pre-prefixed, or empty string.
145+
146+
Returns ``None`` unchanged. Returns the value unchanged when it equals the
147+
namespace or already starts with ``f"{namespace}:"``. Otherwise prefixes
148+
it -- including the empty-string case, which becomes ``f"{namespace}:"``.
149+
"""
150+
if session is None:
151+
return session
152+
prefix = f"{namespace}:"
153+
if session == namespace or session.startswith(prefix):
154+
return session
155+
return f"{prefix}{session}"
156+
157+
138158
async def verify_public_flow_and_get_user(
139159
flow_id: uuid.UUID,
140160
client_id: str | None,

src/backend/base/langflow/api/v1/chat.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
format_exception_message,
3232
get_top_level_vertices,
3333
parse_exception,
34+
scope_session_to_namespace,
3435
verify_public_flow_and_get_user,
3536
)
3637
from langflow.api.v1.schemas import (
@@ -661,6 +662,9 @@ async def build_public_tmp(
661662
- The 'data' parameter is NOT accepted to prevent flow definition tampering
662663
- Public flows must execute the stored flow definition only
663664
- The flow definition is always loaded from the database
665+
- Caller-supplied 'inputs.session' is namespaced under the (client_id,
666+
flow_id) virtual flow ID so an unauthenticated caller cannot address a
667+
session that lives outside its own namespace (CVE-2026-33017)
664668
665669
The endpoint:
666670
1. Verifies the requested flow is marked as public in the database
@@ -703,6 +707,12 @@ async def build_public_tmp(
703707
authenticated_user_id=authenticated_user_id,
704708
)
705709

710+
# Defends CVE-2026-33017: scope caller session into the (client_id, flow_id) namespace.
711+
if inputs is not None and inputs.session is not None:
712+
scoped_session = scope_session_to_namespace(inputs.session, str(new_flow_id))
713+
if scoped_session != inputs.session:
714+
inputs = inputs.model_copy(update={"session": scoped_session})
715+
706716
# Validate the stored flow data after the public-access boundary.
707717
# Public flows never accept client-supplied data.
708718
async with session_scope() as session:

src/backend/base/langflow/initial_setup/starter_projects/Document Q&A.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1319,7 +1319,7 @@
13191319
},
13201320
{
13211321
"name": "langchain_core",
1322-
"version": "1.3.1"
1322+
"version": "1.3.2"
13231323
},
13241324
{
13251325
"name": "pydantic",

src/backend/base/langflow/initial_setup/starter_projects/Hybrid Search RAG.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1521,7 +1521,7 @@
15211521
},
15221522
{
15231523
"name": "langchain_core",
1524-
"version": "1.3.1"
1524+
"version": "1.3.2"
15251525
},
15261526
{
15271527
"name": "lfx",

src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2084,7 +2084,7 @@
20842084
},
20852085
{
20862086
"name": "langchain_core",
2087-
"version": "1.3.1"
2087+
"version": "1.3.2"
20882088
}
20892089
],
20902090
"total_dependencies": 3

src/backend/base/langflow/initial_setup/starter_projects/Invoice Summarizer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,7 @@
11921192
},
11931193
{
11941194
"name": "langchain_core",
1195-
"version": "1.3.1"
1195+
"version": "1.3.2"
11961196
}
11971197
],
11981198
"total_dependencies": 3

0 commit comments

Comments
 (0)