CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-27483

Lobotomy by File Upload: RCE in MindsDB via Path Traversal

Alon Barad
Alon Barad
Software Engineer

Feb 25, 2026·6 min read·45 visits

Executive Summary (TL;DR)

MindsDB trusted user-supplied filenames in its upload handler. Attackers can use directory traversal ('../') to overwrite files anywhere on the server. Overwriting a common library like 'pip' and triggering an install process grants full RCE.

A critical path traversal vulnerability in MindsDB allows authenticated attackers to break out of the upload sandbox and overwrite arbitrary system files. By manipulating the 'Content-Disposition' header during file uploads, an attacker can replace core Python libraries with malicious code, leading to Remote Code Execution (RCE) when the application subsequently attempts to use those libraries. The flaw stems from an unsafe configuration of the 'python-multipart' library.

The Hook: Bringing a Gun to a Data Fight

MindsDB is a darling of the AI world, bridging the gap between traditional SQL databases and machine learning models. It essentially allows you to query predictive models as if they were database tables. It’s a complex beast, often deployed on high-powered GPU instances that are juicy targets for crypto-miners and corporate spies alike.

Like any modern data platform, it needs a way to ingest data. Enter the /api/files endpoint. This is the front door for users to upload their CSVs, JSONs, and datasets to train their models. Usually, file uploads are handled with kid gloves: generated UUID filenames, sandboxed directories, and strict validation.

But in CVE-2026-27483, MindsDB didn't just drop the ball; they threw it through their own window. By trusting the filename provided by the client, they turned a simple file upload feature into a primitive filesystem editor. If you can write a file anywhere, you can run code anywhere.

The Flaw: Polite Libraries and Gullible Code

The root cause here is a classic case of "Default Insecurity" combined with developer oversight. MindsDB uses python-multipart to parse incoming HTTP multipart requests. This library is generally robust, but it offers a configuration option that is practically a foot-gun if you aren't careful: UPLOAD_KEEP_FILENAME.

Prior to version 25.9.1.1, MindsDB explicitly set this option to True. Here is the logic flaw in plain English: The application told the library, "Hey, whatever filename the user sends in the HTTP headers, please respect that and use it on our disk."

> [!WARNING] > trusting Content-Disposition is fatal. Attackers control the HTTP request headers entirely.

When a standard user uploads data.csv, everything is fine. But when a hacker uploads a file and sets the filename to ../../../../bin/evil.sh, the library—following its configuration—dutifully traverses up the directory tree and plants the file outside the intended temporary folder. There was zero sanitization of path separators (/ or \) before the write operation occurred.

The Code: The Smoking Gun

Let's look at the patch, which is effectively a confession of the crime. The fix was applied in commit 87a44bdb2b97f963e18f10a068e1a1e2690505ef. The developers had to do two things: stop the library from being so helpful, and verify the input themselves.

Here is the critical diff from mindsdb/api/http/namespaces/file.py. Notice the addition of the pathlib check and the configuration flip:

# THE FIX
 
-            data["file"] = file.file_name.decode()
+            file_name = file.file_name.decode()
+            data["file"] = file_name
+            # 1. Validate the filename has no path info
+            if Path(file_name).name != file_name:
+                raise ValueError(f"Wrong file name: {file_name}")
 
# ... later in the file ...
 
-                    "UPLOAD_KEEP_FILENAME": True,
+                    # 2. Stop the library from using the input filename
+                    "UPLOAD_KEEP_FILENAME": False,

The check Path(file_name).name != file_name is simple but effective. If file_name is foo.csv, Path('foo.csv').name is foo.csv. They match. If file_name is ../foo.csv, Path('../foo.csv').name is just foo.csv. They don't match, and the exception is raised.

The Exploit: Hijacking Python's Brain

So we can write files anywhere. How do we turn that into a shell? We could try to overwrite /etc/passwd, but we might not have root. A more elegant approach targets the application's own dependencies. MindsDB is a Python application, and Python is very trusting of its environment.

The research indicates that MindsDB exposes an /install endpoint that triggers pip via a subprocess to install integrations. This is our trigger mechanism. If we can overwrite a file that pip (or the installation process) loads, we win.

The Attack Chain:

  1. Craft the Payload: Create a malicious Python script containing a reverse shell or a command to add a new admin user.
  2. Target Selection: Locate the site-packages directory. Since we have low-privilege access, we likely can't write to system folders, but we can overwrite files inside the MindsDB environment or user-local packages.
  3. The Traversal: Send a POST request to /api/files with a filename like ../../../../usr/local/lib/python3.10/site-packages/pip/__init__.py.
  4. The Trigger: Call the /install endpoint. The server spins up a subprocess, imports pip (which is now our malicious file), and executes our code.

The Impact: Total Compromise

This is an 8.8 CVSS for a reason. While it requires authentication, in many enterprise environments, "authentication" just means having a valid SSO token or being an internal user. The impact is effectively total system compromise.

Once an attacker has RCE on a MindsDB instance, they have access to:

  1. Connected Databases: MindsDB holds credentials for all the datasources it analyzes (Postgres, Snowflake, MongoDB).
  2. Model Data: Proprietary predictive models and the training data used to create them.
  3. Compute Resources: These servers usually have high-end GPUs (A100s, H100s), making them prime targets for stealthy crypto-mining or password cracking operations.

The vulnerability is particularly dangerous because it leaves very few artifacts if the attacker cleans up after themselves. They overwrite a library, execute the payload, and then overwrite the library back with the original content.

The Fix: Remediation

If you are running MindsDB, stop reading and upgrade to 25.9.1.1 immediately. The patch is relatively simple, but it closes the hole completely by forcing random temporary filenames and validating input.

For Developers:

  1. Never trust Content-Disposition. Treat filenames as user input, because they are. Sanitize them aggressively.
  2. Use UUIDs. Don't try to save the file as quarterly_report.csv. Save it as 550e8400-e29b-41d4-a716-446655440000.csv and store the mapping to the real name in your database.
  3. Update Dependencies. This exploit was partially enabled by an older version of python-multipart. The patch included an upgrade to 0.0.20.

If upgrading is impossible (why?), you can mitigate this at the WAF level by blocking requests to /api/files that contain .. or %2e%2e in the body payload, though this is notoriously difficult to do correctly with multipart data.

Official Patches

MindsDBGitHub Commit fixing the issue

Fix Analysis (1)

Technical Appendix

CVSS Score
8.8/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Affected Systems

MindsDB < 25.9.1.1

Affected Versions Detail

Product
Affected Versions
Fixed Version
MindsDB
MindsDB
< 25.9.1.125.9.1.1
AttributeDetail
CWECWE-22 (Path Traversal)
CVSS8.8 (Critical)
Attack VectorNetwork (Authenticated)
ImpactRemote Code Execution (RCE)
Librarypython-multipart
Fix Commit87a44bd

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1059.006Command and Scripting Interpreter: Python
Execution
T1574.008Hijack Execution Flow: Path Interception by Search Order Hijacking
Persistence
CWE-22
Path Traversal

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

Known Exploits & Detection

TheoreticalExploit involves uploading a file named with traversal characters to overwrite python libraries, then triggering their execution.

Vulnerability Timeline

Patch committed by Max Stepanov
2025-09-04
CVE Published / Advisory Released
2026-02-24
MindsDB v25.9.1.1 Released
2026-02-24

References & Sources

  • [1]GitHub Security Advisory
  • [2]NIST NVD

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 minutes ago•CVE-2026-55618
6.5

CVE-2026-55618: URL Extraction Bypass via HTML Entities in eml_parser

A critical logical flaw in the eml_parser Python module prior to version 3.0.2 allows malicious URLs to evade automated security analysis pipelines. By encoding key URI delimiter characters as HTML decimal entities, an attacker can mask indicators of compromise. Security controls, orchestration layers, and sandbox systems fail to detect these links, while downstream Mail User Agents natively reconstruct the malicious hyper-references when processed by end-users. This mechanism undermines the integrity of automated indicator extraction processes within Security Operations Centers.

Amit Schendel
Amit Schendel
0 views•7 min read
•about 1 hour ago•CVE-2026-55619
5.3

CVE-2026-55619: Parser Denial of Service via Deeply Nested Parentheses in E-mail Headers

A denial of service vulnerability in GOVCERT-LU eml_parser before version 3.0.2 allows unauthenticated remote attackers to trigger an unhandled RecursionError exception. The issue arises during the parsing of structured email headers containing excessively nested parentheses representing Comments and Folding White Space (CFWS). Because the parser fails to catch this recursion-limit exception from Python's standard library, processing of the entire mail immediately aborts, which can disrupt automated security triage pipelines and email ingestion components.

Alon Barad
Alon Barad
2 views•6 min read
•about 2 hours ago•CVE-2026-55620
7.5

CVE-2026-55620: Algorithmic Complexity Denial of Service in GOVCERT-LU eml_parser

Prior to version 3.0.2, GOVCERT-LU's eml_parser library is vulnerable to an algorithmic complexity Denial of Service (DoS) vulnerability via the comment-stripping routine noparenthesis() in routing.py. An unauthenticated attacker can submit a crafted EML file containing nested parenthesized comments to cause complete CPU saturation. This happens due to a quadratic time complexity bottleneck in regex replacement of nested structures.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 3 hours ago•CVE-2026-55629
8.7

CVE-2026-55629: Arbitrary File Read via Path Traversal in Whistle Proxy Internal Service

Whistle prior to version 2.10.3 contains a path traversal vulnerability in its internal service layer. An unauthenticated remote attacker can read arbitrary files on the hosting operating system by issuing a crafted GET request containing relative or absolute file paths to the `/cgi-bin/temp/get` endpoint. This behavior occurs because the application fails open when an input file parameter does not match the temporary file format regex.

Alon Barad
Alon Barad
4 views•6 min read
•about 4 hours ago•CVE-2026-55609
7.1

CVE-2026-55609: Arbitrary File Read and Write via Model Context Protocol (MCP) Tools in sublinear-time-solver and consciousness-explorer

An arbitrary file read and write vulnerability exists in the Model Context Protocol (MCP) server endpoints of sublinear-time-solver and consciousness-explorer. By providing unvalidated file paths to the export_state, import_state, saveVectorToFile, and loadVectorFromFile tools, local attackers can read or overwrite sensitive host files.

Alon Barad
Alon Barad
3 views•5 min read
•about 5 hours ago•CVE-2026-55604
8.6

CVE-2026-55604: Authorization Bypass via Global Session Singleton in @arikusi/deepseek-mcp-server

An Authorization Bypass Through User-Controlled Key (CWE-639 / Insecure Direct Object Reference) vulnerability exists in @arikusi/deepseek-mcp-server starting in version 1.4.2 and fixed in 1.7.0. In Streamable HTTP transport mode, a process-global SessionStore singleton allows any remote client to retrieve or modify active conversation contexts belonging to other clients.

Alon Barad
Alon Barad
8 views•7 min read