CVE-2026-125325
pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests
pgEdge RAG Server is an API server for retrieval-augmented generation over PostgreSQL content using pgvector. Prior to 2.0.0, the BM25 keyword index is a single per-pipeline object shared by the unauthenticated query endpoint, and concurrent requests lock its clear, refill, and search operations separately. This allows one request to search a corpus populated through another request's search filter, which can return documents belonging to a different tenant or customer without malformed input. The affected responses cannot be identified retrospectively from the server logs. This issue is fixed in version 2.0.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used 5.9
pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests
pgEdge RAG Server is an API server for retrieval-augmented generation over PostgreSQL content using pgvector. Prior to 2.0.0, the BM25 keyword index is a single per-pipeline object shared by the unauthenticated query endpoint, and concurrent requests lock its clear, refill, and search operations separately. This allows one request to search a corpus populated through another request's search filter, which can return documents belonging to a different tenant or customer without malformed input. The affected responses cannot be identified retrospectively from the server logs. This issue is fixed in version 2.0.0.
- Record
CVE-2026-125325- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-362, CWE-488
- Updated
- 2026-11-10
EUVDEUVD-2026-121707 5.9
pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests
- Record
EUVD-2026-121707- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Updated
- 2026-11-12
GitHub AdvisoriesGHSA-w437-9mwm-j6vq 5.9
pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests
Impact
Documents belonging to one caller could be returned to another. Where an application passes a customer or tenant identifier as a search filter, that scoping could be defeated by ordinary concurrent traffic. No injection and no malformed input are required — normal load is enough.
The BM25 keyword index was a single per-pipeline object shared by every request. A request cleared it, refilled it from its own filtered corpus and then searched it, taking a separate lock for each step rather than holding the sequence as a unit. Concurrent requests therefore interleaved, and a search could run against a corpus that a different request's filter had populated.
Who is affected: any deployment of pgEdge RAG Server at 1.0.0 or earlier, including all alpha and beta pre-releases, that serves concurrent queries — most acutely those relying on a search filter to separate tenants or customers. The query endpoint is unauthenticated in the affected versions (internal/server/middleware.go:37 applies logging, panic recovery and optional CORS only), so both the party whose results leak and the party receiving them are anonymous remote callers.
Patches
Fixed in 2.0.0. Upgrade to 2.0.0 or later.
The index is now built per request rather than shared. The regression is pinned by TestSearch_ConcurrentRequestsDoNotShareKeywordIndex in internal/pipeline/orchestrator_test.go.
Upgrading does not tell a developer whether or not their application affected, and needs action beyond upgrading. If a consuminag application scopes results by tenant, treat responses served under concurrent load on any affected version as potentially having included another tenant's documents. Affected responses cannot be identified from the server's own logs, so there is no retrospective check available.
Workarounds
Set hybrid_enabled: false on the pipeline, which skips the keyword arm and with it the shared index. Callers can also pass disable_hybrid per request, which can only ever turn the arm off.
Neither is a substitute for upgrading.
- Record
GHSA-w437-9mwm-j6vq- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-362, CWE-488
- Updated
- 2026-11-12
NVD 5.9
pgEdge RAG Server is an API server for retrieval-augmented generation over PostgreSQL content using pgvector. Prior to 2.0.0, the BM25 keyword index is a single per-pipeline object shared by the unauthenticated query endpoint, and concurrent requests lock its clear, refill, and search operations separately. This allows one request to search a corpus populated through another request's search filter, which can return documents belonging to a different tenant or customer without malformed input. The affected responses cannot be identified retrospectively from the server logs. This issue is fixed in version 2.0.0.
- Record
CVE-2026-125325- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-362, CWE-488
- Updated
- 2026-11-10
OSV 5.9
pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests
pgEdge RAG Server is an API server for retrieval-augmented generation over PostgreSQL content using pgvector. Prior to 2.0.0, the BM25 keyword index is a single per-pipeline object shared by the unauthenticated query endpoint, and concurrent requests lock its clear, refill, and search operations separately. This allows one request to search a corpus populated through another request's search filter, which can return documents belonging to a different tenant or customer without malformed input. The affected responses cannot be identified retrospectively from the server logs. This issue is fixed in version 2.0.0.
- Record
CVE-2026-125325- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-362, CWE-488
- Updated
- 2026-11-12
OSVGHSA-w437-9mwm-j6vq 5.9
pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests
Impact
Documents belonging to one caller could be returned to another. Where an application passes a customer or tenant identifier as a search filter, that scoping could be defeated by ordinary concurrent traffic. No injection and no malformed input are required — normal load is enough.
The BM25 keyword index was a single per-pipeline object shared by every request. A request cleared it, refilled it from its own filtered corpus and then searched it, taking a separate lock for each step rather than holding the sequence as a unit. Concurrent requests therefore interleaved, and a search could run against a corpus that a different request's filter had populated.
Who is affected: any deployment of pgEdge RAG Server at 1.0.0 or earlier, including all alpha and beta pre-releases, that serves concurrent queries — most acutely those relying on a search filter to separate tenants or customers. The query endpoint is unauthenticated in the affected versions (internal/server/middleware.go:37 applies logging, panic recovery and optional CORS only), so both the party whose results leak and the party receiving them are anonymous remote callers.
Patches
Fixed in 2.0.0. Upgrade to 2.0.0 or later.
The index is now built per request rather than shared. The regression is pinned by TestSearch_ConcurrentRequestsDoNotShareKeywordIndex in internal/pipeline/orchestrator_test.go.
Upgrading does not tell a developer whether or not their application affected, and needs action beyond upgrading. If a consuminag application scopes results by tenant, treat responses served under concurrent load on any affected version as potentially having included another tenant's documents. Affected responses cannot be identified from the server's own logs, so there is no retrospective check available.
Workarounds
Set hybrid_enabled: false on the pipeline, which skips the keyword arm and with it the shared index. Callers can also pass disable_hybrid per request, which can only ever turn the arm off.
Neither is a substitute for upgrading.
- Record
GHSA-w437-9mwm-j6vq- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-362, CWE-488
- Updated
- 2026-11-12
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
github.com/pgEdge/pgedge-rag-serverGo | before 1.0.1-0.20260729020411-a09d4872356b | 1.0.1-0.20260729020411-a09d4872356b |
History
| Recorded | Changed | Sources |
|---|---|---|
| published | EUVD | |
| affected, references | OSV | |
| affected, facts, references | GitHub Advisories, OSV | |
| aliases, references | NVD, OSV | |
| aliases, published | EUVD | |
| first indexed | CVE List |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-125325 is a medium vulnerability (CVSS 5.9) in Pgedge Pgedge-rag-server, published November 10, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.27%, the 19th percentile. Fixed in github.com/pgEdge/pgedge-rag-server 1.0.1-0.20260729020411-a09d4872356b.
References
github.com/pgEdge/pgedge-rag-server/security/advisories/GHSA-w437-9mwm-j6vq
github.com/pgEdge/pgedge-rag-server/pull/44
github.com/pgEdge/pgedge-rag-server/commit/a09d4872356b510c81f11591845445c33ff45a84
github.com/pgEdge/pgedge-rag-server/releases/tag/v2.0.0
nvd.nist.gov/vuln/detail/CVE-2026-125325
github.com/advisories/GHSA-w437-9mwm-j6vq
github.com/CVEProject/cvelistV5/tree/main/cves/2026/125xxx/CVE-2026-125325.json
github.com/pgEdge/pgedge-rag-server