Langflow: IDOR exposes flows and plaintext API keys
Any Langflow deployment with authentication enabled and multiple users is fully compromised at the data layer — any authenticated user can read, modify, or delete any other user's AI agent flows, including embedded plaintext LLM API keys. Upgrade to Langflow 1.5.1 immediately and rotate all API keys stored in flows. Treat every multi-user Langflow instance running a version prior to 1.5.1 as fully breached.
Affected Systems
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| langflow | pip | <= 1.5.0 | 1.5.1 |
| langflow-base | pip | <= 0.5.0 | 0.5.1 |
Severity & Risk
Recommended Action
- 1. Patch immediately: upgrade langflow to ≥1.5.1 or langflow-base to ≥0.5.1. 2. Rotate all LLM provider API keys stored in any Langflow flow — assume they are compromised in any pre-1.5.1 multi-user deployment. 3. If patching is not immediately possible, restrict to single-user mode (AUTO_LOGIN=True) or block external network access via firewall rules. 4. Audit Langflow API access logs for cross-user flow UUID access patterns — look for flow reads by users who do not own those flows. 5. Review all flow definitions for signs of logic tampering, especially added nodes or modified tool configurations.
Classification
Compliance Impact
This CVE is relevant to:
Technical Details
NVD Description
Langflow is a tool for building and deploying AI-powered agents and workflows. Prior to version 1.5.1, the `_read_flow` helper in `src/backend/base/langflow/api/v1/flows.py` branched on the `AUTO_LOGIN` setting to decide whether to filter by `user_id`. When `AUTO_LOGIN` was `False` (i.e., authentication was enabled), neither branch enforced an ownership check — the query returned any flow matching the given UUID regardless of who owned it. This allowed any authenticated user to read any other user's flow, including embedded plaintext API keys; modify the logic of another user's AI agents, and/or delete flows belonging to other users. The vulnerability was introduced by the conditional logic that was meant to accommodate public/example flows (those with `user_id = NULL`) under auto-login mode, but inadvertently left the authenticated path without an ownership filter. The fix in version 1.5.1 removes the `AUTO_LOGIN` conditional entirely and unconditionally scopes the query to the requesting user.
Exploitation Scenario
An attacker registers or compromises any valid Langflow account in a multi-user deployment. They call GET /api/v1/flows/{uuid} iterating UUIDs (which are sequential or discoverable via timing), receiving full flow JSON including plaintext API keys for connected LLM providers. They exfiltrate the keys for unauthorized LLM API usage or lateral movement into connected services. They then issue a PATCH request to silently modify a victim's flow — injecting a malicious tool node or system prompt that persists across future agent executions — poisoning the AI agent's behavior without any visible indication to the legitimate owner.
Weaknesses (CWE)
References
- github.com/advisories/GHSA-8c4j-f57c-35cf
- github.com/advisories/GHSA-8c4j-f57c-35cf
- github.com/advisories/GHSA-8c4j-f57c-35cf
- github.com/advisories/GHSA-8c4j-f57c-35cf
- github.com/advisories/GHSA-8c4j-f57c-35cf
- github.com/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- nvd.nist.gov/vuln/detail/CVE-2026-34046
- nvd.nist.gov/vuln/detail/CVE-2026-34046
- nvd.nist.gov/vuln/detail/CVE-2026-34046
- nvd.nist.gov/vuln/detail/CVE-2026-34046
- nvd.nist.gov/vuln/detail/CVE-2026-34046
- nvd.nist.gov/vuln/detail/CVE-2026-34046
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/pull/8956
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
- github.com/langflow-ai/langflow/security/advisories/GHSA-8c4j-f57c-35cf
AI Threat Alert