Sploitus

Exploit for CVE-2025-64513 CVE-2025-64513 CVE-2026-26190

githubexploit · 2026-08-05

Exploit Code

README73 lines
## https://sploitus.com/exploit?id=CCE27BEF-74DE-5AC7-8FA0-F4D0E1A5839B
# milvus-auth-audit

Milvus authentication security detection script. It detects three authentication vulnerabilities:

| Vulnerability | CVE | Affected Versions | Detection Method |
|---------------|-----|-------------------|------------------|
| SourceID bypass authentication | CVE-2025-64513 | --port 19530 --mgmt-port 9091 --internal-port 53100 |
| Arbitrary expression execution at /expr (auth=by-dev) | CVE-2026-26190 | --mgmt-port 9091 | HIT |
| No authentication at internal port; database=[...] | CVE-2026-26190 | --internal-port 53100 | HIT |

## Parameters

`-host`: Milvus proxy address
`-port`: Proxy gRPC port (default 19530)
`-mgmt-port`: Management port (default 9091, /expr here)
`-internal-port`: Internal port (default 53100, 0 to skip)
`-cve-check`: Output CVE and affected version descriptions

## Dependencies

```bash
pip install grpcio protobuf
```

GRPC calls require Python code generated from proto definitions (`milvus_pb2_grpc.py`, `rootCoord_pb2_grpc.py`, etc.). Place these files in the `proto/` directory within the script’s directory. Generation method:

```bash
# 1. Clone the milvus-proto repository
git clone https://github.com/milvus-io/milvus-proto.git
# 2. Clone the milvus source code (internal proto: rootCoord.proto, internal.proto, proxy.proto, etc.)
git clone https://github.com/milvus-io/milvus.git
# 3. Generate (milvus internal proto in milvus/pkg/proto/)
pip install grpcio-tools
python3 -m grpc_tools.protoc -I milvus-proto/proto -I milvus/pkg/proto \
  --python_out=proto --grpc_python_out=proto \
  milvus-proto/proto/milvus.proto milvus/pkg/proto/rootCoord.proto \
  milvus/pkg/proto/internal.proto milvus/pkg/proto/proxy.proto
```

## Output for Three Versions

```
=== 2.6.4 ===
[verify] SourceID bypass authentication, Database=[...] -> PASS
[verify] /expr allows arbitrary expression execution (auth=by-dev) -> PASS
[exploit] No authentication at internal port, Database=[...] -> PASS
![3 vulnerabilities found]
```

=== 2.6.5 ===
[verify] SourceID rejected -> SAFE
[verify] /expr allows arbitrary expression execution (auth=by-dev) -> PASS
[exploit] No authentication at internal port, Database=[...] -> PASS
![2 vulnerabilities found]
```

=== 2.6.10 ===
[verify] SourceID rejected -> SAFE
[verify] /expr is disabled by default -> SAFE
[exploit] Port unreachable -> SAFE
[+] No vulnerabilities found
```

## Description of Vulnerabilities

1. **CVE-2025-64513 (SourceID backdoor)**: In `internal/proxy/authentication_interceptor.go`, the `validSourceID()` function checks the `sourceId` header. If the decoded value equals `@@milvus-member@@`, the entire authentication process is skipped. This is an internal component trust mechanism (in `grpcclient/auth.go`), but there is no source verification, making it easily forged from outside. Complete exploitation chain: `sourceid + authorization = base64("root:fake_password")` → full admin access (proxy bypasses verification, fake identity passed through). 
2. **CVE-2026-26190 (/expr weak token)**: The `/expr` debug endpoint on the management port 9091 uses an authentication token from `etcd.rootPath` (default `by-dev`). This token is completely predictable and can execute arbitrary `expr-lang` expressions. Since 2.6.10, this has been controlled by `common.security.exprEnabled`, and it’s disabled by default.
3. **No authentication at internal port 53100**: The `AuthenticationInterceptor` is only registered in the proxy (19530). The internal gRPC server of `rootCoord` (53100) has no authentication. Direct connection without authentication within the container can lead to full admin access. Since 2.6.10, this port no longer listens.

## Disclaimer

This tool is used for security detection in authorized environments only. Do not use it on unauthorized systems.