Langflow: Unauthenticated Flow Execution via Webhook Authentication Bypass
### Summary A vulnerability in Langflow's webhook authentication logic allows unauthenticated users to trigger the execution of any flow. The system incorrectly bypasses API key validation when the `WEBHOOK_AUTH_ENABLE` configuration is set to `False`. This allows a remote attacker who knows a flow's UUID to execute it as if they were the owner, potentially leading to Remote Code Execution (RCE) or Denial of Service (DoS). ### Details The `WEBHOOK_AUTH_ENABLE` setting was introduced in v1.7.0 (#9139) with a default of `False`. The root cause is in the webhook authentication path, `AuthService.get_webhook_user` (`src/backend/base/langflow/services/auth/service.py`; the thin wrapper in `src/backend/base/langflow/services/auth/utils.py` just delegates to it): ```python async def get_webhook_user(self, flow_id: str, request: Request) -> UserRead: settings_service = self.settings ... # VULNERABILITY: If this setting is False (default in <= 1.9.0), it returns # the flow owner WITHOUT checking the API Key in the request. if not settings_service.auth_settings.WEBHOOK_AUTH_ENABLE: try: flow_owner = await get_user_by_flow_id_or_endpoint_name(flow_id) return flow_owner ``` By default (v1.7.0 through v1.9.0), Langflow treats `WEBHOOK_AUTH_ENABLE` as `False`, meaning all webhook endpoints are public. This relies exclusively on the secrecy of the `flow_id` (UUID), which is an insecure practice (Security by Obscurity). A related report, GHSA-6g4m-v5q2-475v, demonstrated a concrete RCE chain
- Products
- langflow
- Affected versions
- 1.7.0, 1.7.1, 1.7.2, 1.7.3, 1.8.0, 1.8.0rc0, 1.8.0rc1, 1.8.0rc2, 1.8.0rc3, 1.8.0rc4, 1.8.0rc5, 1.8.0rc6, 1.8.1, 1.8.2, 1.8.3, 1.8.3rc0, 1.8.4, 1.9.0
- Fixed versions
- 1.9.1
- CVEs
- CVE-2026-8505
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 18:17 UTC · Revision 1
Source evidence
Langflow: Unauthenticated Flow Execution via Webhook Authentication Bypass
core-osv · Original sourcePublished 5 Oct 2026, 22:31 UTC
### Summary A vulnerability in Langflow's webhook authentication logic allows unauthenticated users to trigger the execution of any flow. The system incorrectly bypasses API key validation when the `WEBHOOK_AUTH_ENABLE` configuration is set to `False`. This allows a remote attacker who knows a flow's UUID to execute it as if they were the owner, potentially leading to Remote Code Execution (RCE) or Denial of Service (DoS). ### Details The `WEBHOOK_AUTH_ENABLE` setting was introduced in v1.7.0 (#9139) with a default of `False`. The root cause is in the webhook authentication path, `AuthService.get_webhook_user` (`src/backend/base/langflow/services/auth/service.py`; the thin wrapper in `src/backend/base/langflow/services/auth/utils.py` just delegates to it): ```python async def get_webhook_user(self, flow_id: str, request: Request) -> UserRead: settings_service = self.settings ... # VULNERABILITY: If this setting is False (default in <= 1.9.0), it returns # the flow owner WITHOUT checking the API Key in the request. if not settings_service.auth_settings.WEBHOOK_AUTH_ENABLE: try: flow_owner = await get_user_by_flow_id_or_endpoint_name(flow_id) return flow_owner ``` By default (v1.7.0 through v1.9.0), Langflow treats `WEBHOOK_AUTH_ENABLE` as `False`, meaning all webhook endpoints are public. This relies exclusively on the secrecy of the `flow_id` (UUID), which is an insecure practice (Security by Obscurity). A related report, GHSA-6g4m-v5q2-475v, demonstrated a concrete RCE chain
osv:GHSA-cf6m-vc3m-7cgm
langflow
Fixed versions: 1.9.1
Complete source record
{
"id": "5fbb6f6357c296939f757f2c0853991d9e20650dea485cdb50b36c8b3fd7704c",
"url": "https://osv.dev/vulnerability/GHSA-cf6m-vc3m-7cgm",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Langflow: Unauthenticated Flow Execution via Webhook Authentication Bypass",
"summary": "### Summary A vulnerability in Langflow's webhook authentication logic allows unauthenticated users to trigger the execution of any flow. The system incorrectly bypasses API key validation when the `WEBHOOK_AUTH_ENABLE` configuration is set to `False`. This allows a remote attacker who knows a flow's UUID to execute it as if they were the owner, potentially leading to Remote Code Execution (RCE) or Denial of Service (DoS). ### Details The `WEBHOOK_AUTH_ENABLE` setting was introduced in v1.7.0 (#9139) with a default of `False`. The root cause is in the webhook authentication path, `AuthService.get_webhook_user` (`src/backend/base/langflow/services/auth/service.py`; the thin wrapper in `src/backend/base/langflow/services/auth/utils.py` just delegates to it): ```python async def get_webhook_user(self, flow_id: str, request: Request) -> UserRead: settings_service = self.settings ... # VULNERABILITY: If this setting is False (default in <= 1.9.0), it returns # the flow owner WITHOUT checking the API Key in the request. if not settings_service.auth_settings.WEBHOOK_AUTH_ENABLE: try: flow_owner = await get_user_by_flow_id_or_endpoint_name(flow_id) return flow_owner ``` By default (v1.7.0 through v1.9.0), Langflow treats `WEBHOOK_AUTH_ENABLE` as `False`, meaning all webhook endpoints are public. This relies exclusively on the secrecy of the `flow_id` (UUID), which is an insecure practice (Security by Obscurity). A related report, GHSA-6g4m-v5q2-475v, demonstrated a concrete RCE chain",
"evidence": "osv:GHSA-cf6m-vc3m-7cgm",
"products": [
{
"name": {
"value": "langflow",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.9.1",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "1.7.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.7.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.7.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.7.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc0",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc1",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc2",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc3",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc4",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc5",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc6",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.3rc0",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.4",
"evidence": "/affected/0/versions"
},
{
"value": "1.9.0",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "critical",
"structured": {
"id": "GHSA-cf6m-vc3m-7cgm",
"aliases": [
"CVE-2026-8505",
"GHSA-cf6m-vc3m-7cgm",
"PYSEC-2026-4233"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "1.7.0"
},
{
"fixed": "1.9.1"
}
]
}
],
"package": {
"name": "langflow",
"purl": "pkg:pypi/langflow",
"ecosystem": "PyPI"
},
"versions": [
"1.7.0",
"1.7.1",
"1.7.2",
"1.7.3",
"1.8.0",
"1.8.0rc0",
"1.8.0rc1",
"1.8.0rc2",
"1.8.0rc3",
"1.8.0rc4",
"1.8.0rc5",
"1.8.0rc6",
"1.8.1",
"1.8.2",
"1.8.3",
"1.8.3rc0",
"1.8.4",
"1.9.0"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-cf6m-vc3m-7cgm/GHSA-cf6m-vc3m-7cgm.json",
"last_known_affected_version_range": "<= 1.9.0"
}
}
],
"modified": "2026-10-15T14:56:16.866108219Z",
"provider": "osv",
"references": [
"https://github.com/langflow-ai/langflow/security/advisories/GHSA-cf6m-vc3m-7cgm",
"https://nvd.nist.gov/vuln/detail/CVE-2026-8505",
"https://github.com/langflow-ai/langflow/pull/12845",
"https://github.com/langflow-ai/langflow/commit/cb6f7508dda83ead9c3e4417e96e4b5bd9a260c3",
"https://github.com/langflow-ai/langflow",
"https://github.com/langflow-ai/langflow/releases/tag/v1.9.1",
"https://www.ibm.com/support/pages/node/7278921"
],
"provider_metadata": {
"cwe_ids": [
"CWE-306"
],
"severity": "CRITICAL",
"github_reviewed": true,
"nvd_published_at": null,
"github_reviewed_at": "2026-10-05T22:31:22Z"
}
},
"related_cves": [
{
"value": "CVE-2026-8505",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 332694,
"published_at": "2026-10-05T22:31:22+00:00"
}Langflow: Unauthenticated Flow Execution via Webhook Authentication Bypass
core-osv · Original sourcePublished 15 Oct 2026, 10:22 UTC
### Summary A vulnerability in Langflow's webhook authentication logic allows unauthenticated users to trigger the execution of any flow. The system incorrectly bypasses API key validation when the `WEBHOOK_AUTH_ENABLE` configuration is set to `False`. This allows a remote attacker who knows a flow's UUID to execute it as if they were the owner, potentially leading to Remote Code Execution (RCE) or Denial of Service (DoS). ### Details The `WEBHOOK_AUTH_ENABLE` setting was introduced in v1.7.0 (#9139) with a default of `False`. The root cause is in the webhook authentication path, `AuthService.get_webhook_user` (`src/backend/base/langflow/services/auth/service.py`; the thin wrapper in `src/backend/base/langflow/services/auth/utils.py` just delegates to it): ```python async def get_webhook_user(self, flow_id: str, request: Request) -> UserRead: settings_service = self.settings ... # VULNERABILITY: If this setting is False (default in <= 1.9.0), it returns # the flow owner WITHOUT checking the API Key in the request. if not settings_service.auth_settings.WEBHOOK_AUTH_ENABLE: try: flow_owner = await get_user_by_flow_id_or_endpoint_name(flow_id) return flow_owner ``` By default (v1.7.0 through v1.9.0), Langflow treats `WEBHOOK_AUTH_ENABLE` as `False`, meaning all webhook endpoints are public. This relies exclusively on the secrecy of the `flow_id` (UUID), which is an insecure practice (Security by Obscurity). A related report, GHSA-6g4m-v5q2-475v, demonstrated a concrete RCE chain
osv:PYSEC-2026-4233
langflow
Fixed versions: 1.9.1
Complete source record
{
"id": "1f89ea68e413137731c6a631c394bb87bc080784bd986207d3262e56f3f35170",
"url": "https://osv.dev/vulnerability/PYSEC-2026-4233",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Langflow: Unauthenticated Flow Execution via Webhook Authentication Bypass",
"summary": "### Summary A vulnerability in Langflow's webhook authentication logic allows unauthenticated users to trigger the execution of any flow. The system incorrectly bypasses API key validation when the `WEBHOOK_AUTH_ENABLE` configuration is set to `False`. This allows a remote attacker who knows a flow's UUID to execute it as if they were the owner, potentially leading to Remote Code Execution (RCE) or Denial of Service (DoS). ### Details The `WEBHOOK_AUTH_ENABLE` setting was introduced in v1.7.0 (#9139) with a default of `False`. The root cause is in the webhook authentication path, `AuthService.get_webhook_user` (`src/backend/base/langflow/services/auth/service.py`; the thin wrapper in `src/backend/base/langflow/services/auth/utils.py` just delegates to it): ```python async def get_webhook_user(self, flow_id: str, request: Request) -> UserRead: settings_service = self.settings ... # VULNERABILITY: If this setting is False (default in <= 1.9.0), it returns # the flow owner WITHOUT checking the API Key in the request. if not settings_service.auth_settings.WEBHOOK_AUTH_ENABLE: try: flow_owner = await get_user_by_flow_id_or_endpoint_name(flow_id) return flow_owner ``` By default (v1.7.0 through v1.9.0), Langflow treats `WEBHOOK_AUTH_ENABLE` as `False`, meaning all webhook endpoints are public. This relies exclusively on the secrecy of the `flow_id` (UUID), which is an insecure practice (Security by Obscurity). A related report, GHSA-6g4m-v5q2-475v, demonstrated a concrete RCE chain",
"evidence": "osv:PYSEC-2026-4233",
"products": [
{
"name": {
"value": "langflow",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.9.1",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "1.7.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.7.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.7.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.7.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc0",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc1",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc2",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc3",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc4",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc5",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.0rc6",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.3rc0",
"evidence": "/affected/0/versions"
},
{
"value": "1.8.4",
"evidence": "/affected/0/versions"
},
{
"value": "1.9.0",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "critical",
"structured": {
"id": "PYSEC-2026-4233",
"aliases": [
"CVE-2026-8505",
"GHSA-cf6m-vc3m-7cgm",
"PYSEC-2026-4233"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "1.7.0"
},
{
"fixed": "1.9.1"
}
]
}
],
"package": {
"name": "langflow",
"purl": "pkg:pypi/langflow",
"ecosystem": "PyPI"
},
"versions": [
"1.7.0",
"1.7.1",
"1.7.2",
"1.7.3",
"1.8.0",
"1.8.0rc0",
"1.8.0rc1",
"1.8.0rc2",
"1.8.0rc3",
"1.8.0rc4",
"1.8.0rc5",
"1.8.0rc6",
"1.8.1",
"1.8.2",
"1.8.3",
"1.8.3rc0",
"1.8.4",
"1.9.0"
],
"database_specific": {
"source": "https://github.com/pypa/advisory-database/blob/main/vulns/langflow/PYSEC-2026-4233.yaml"
}
}
],
"modified": "2026-10-15T14:45:12.948594146Z",
"provider": "osv",
"references": [
"https://github.com/langflow-ai/langflow/security/advisories/GHSA-cf6m-vc3m-7cgm",
"https://nvd.nist.gov/vuln/detail/CVE-2026-8505",
"https://github.com/langflow-ai/langflow/pull/12845",
"https://github.com/langflow-ai/langflow/commit/cb6f7508dda83ead9c3e4417e96e4b5bd9a260c3",
"https://github.com/langflow-ai/langflow",
"https://github.com/langflow-ai/langflow/releases/tag/v1.9.1",
"https://www.ibm.com/support/pages/node/7278921",
"https://pypi.org/project/langflow",
"https://github.com/advisories/GHSA-cf6m-vc3m-7cgm"
]
},
"related_cves": [
{
"value": "CVE-2026-8505",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 332655,
"published_at": "2026-10-15T10:22:44.220122+00:00"
}