CVE-2026-26190
Milvus Allows Unauthenticated Access to Restful API on Metrics Port (9091) Leads to Critical System Compromise
Record summary
CVE-2026-26190 has a selected CVSS score of 9.8 (critical); EIP currently links 1 repository PoC and 1 Nuclei template.
Description
Milvus is an open-source vector database built for generative AI applications. Prior to 2.5.27 and 2.6.10, Milvus exposes TCP port 9091 by default, which enables authentication bypasses. The /expr debug endpoint uses a weak, predictable default authentication token derived from etcd.rootPath (default: by-dev), enabling arbitrary expression evaluation. The full REST API (/api/v1/*) is registered on the metrics/management port without any authentication, allowing unauthenticated access to all business operations including data manipulation and credential management. This vulnerability is fixed in 2.5.27 and 2.6.10.
Exploitation context
Affected products and versions
3| Product | Source | Version range | Status |
|---|---|---|---|
milvusBrowse milvus / milvus | VulnCheck | Version data not supplied | |
| CVE List | < 2.5.27 | affected | |
| >= 2.6.0, < 2.6.10 | affected | ||
github.com/milvus-io/milvusBrowse Go / github.com/milvus-io/milvus | GitHub Advisory | Before 2.5.27 · Fixed in 2.5.27 | affected |
| 2.6.0 to < 2.6.10 · Fixed in 2.6.10 | affected | ||
Proofs of concept
1Repository PoCs
GitHubqianlijaingshan/milvus-auth-auditRepository PoCby qianlijaingshanStars: 0Scanner2 files
Analysis
Technical assessment
A Python script that checks a Milvus instance for three authentication vulnerabilities (CVE-2025-64513, CVE-2026-26190, and an unauthenticated internal port) by sending gRPC and HTTP requests and reporting whether the target is vulnerable. It does not perform any post-exploitation actions.
Backdoor review
No backdoor observed in reviewed code
The repository contains a Python security audit script and its README. The script checks for three known Milvus authentication vulnerabilities (CVE-2025-64513, CVE-2026-26190, and an unauthenticated internal port) by sending crafted requests to a target Milvus instance. No backdoor, trojan, or deceptive payload targeting the person running the PoC was observed. The script's behavior is limited to the described vulnerability checks and does not perform any concealed or unrelated harmful actions.
Classification basis and observed behavior
Classification basis
The script only sends detection probes (gRPC ListDatabases with and without the sourceid header, HTTP GET to /expr, and optional gRPC to the internal port) and reports whether the target is vulnerable. It does not perform any data modification, exfiltration, or administrative actions, which makes it a scanner rather than an exploit.
milvus-auth-audit.py:3-9milvus-auth-audit.py:78-113milvus-auth-audit.py:116-126milvus-auth-audit.py:129-148Requirements
- Network access to the target Milvus proxy gRPC port (default 19530) and management port (default 9091).
milvus-auth-audit.py:15 - Python dependencies grpcio and protobuf, plus compiled proto stubs in a proto/ subdirectory.
README.md:31-32
Observed behavior
- Sends an unauthenticated gRPC ListDatabases request to determine if authentication is enabled.
milvus-auth-audit.py:55-75 - Sends a gRPC ListDatabases request with a sourceid header containing the base64-encoded internal member credential to test CVE-2025-64513.
milvus-auth-audit.py:78-113 - Sends an HTTP GET request to /expr?code=1%2B1&auth=payload withheld on the management port to test CVE-2026-26190.
milvus-auth-audit.py:116-126 - Optionally sends an unauthenticated gRPC ListDatabases request directly to the internal rootcoord port (default 53100) to test for missing authentication.
milvus-auth-audit.py:129-148 - Prints a summary of which checks resulted in HIT, SAFE, or SKIP.
milvus-auth-audit.py:195-205
Behaviors behind the backdoor verdict
Observables
- Credential
- Payload withheldBase64-encoded sourceid payload used to test CVE-2025-64513 authentication bypass.
milvus-auth-audit.py:30 - Credential
- Payload withheldDefault authentication token used to test CVE-2026-26190 /expr endpoint weak token vulnerability.
milvus-auth-audit.py:31 - Network Behavior
- Payload withheldScript sends a ListDatabases request with a crafted sourceid header to test authentication bypass.
milvus-auth-audit.py:102-103 - Network Behavior
- Payload withheldScript sends an HTTP request to the management port to test the /expr endpoint weak token vulnerability.
milvus-auth-audit.py:118-119 - Network Behavior
- Payload withheldScript connects to the internal rootcoord port to test for unauthenticated access.
milvus-auth-audit.py:137-139
What the analysis did not establish
- The evidence includes only the README and the Python script; the required compiled proto stubs (milvus_pb2_grpc.py, root_coord_pb2_grpc.py, etc.) are not provided, so the script cannot be executed as-is.
- The script's behavior is inferred from source code analysis; no runtime output or network traffic is included in the evidence.
- The review is based solely on the supplied text files (README.md and milvus-auth-audit.py). No binary files were present. The script's behavior when executed with specific arguments or against a live target was not tested; analysis is static only.
This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
Nuclei templates
1ProjectDiscoveryCRITICALMilvus - Unauthenticated Metrics API AccessCVSS 9.8
Milvus < 2.5.27 and < 2.6.10 contains an authentication bypass caused by weak default token and unauthenticated REST API on TCP port 9091, letting attackers perform arbitrary expression evaluation and data manipulation, exploit requires network access to port 9091.
Impact
Attackers can bypass authentication to execute arbitrary expressions and manipulate data, risking full system compromise.
Remediation
Update to versions 2.5.27 or 2.6.10 or later.
Source: ProjectDiscovery