{"id":"CVE-2026-125325","aliases":["GHSA-w437-9mwm-j6vq"],"title":"pgEdge RAG Server shared keyword index leaked results between concurrent unauthenticated requests","titleSource":"OSV","descriptionSource":"OSV","declaredSeverity":"MODERATE","description":"### Impact\n\nDocuments 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.\n\nThe 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.\n\n**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.\n\n### Patches\n\n**Fixed in `2.0.0`. Upgrade to `2.0.0` or later.**\n\nThe index is now built per request rather than shared. The regression is pinned by `TestSearch_ConcurrentRequestsDoNotShareKeywordIndex` in `internal/pipeline/orchestrator_test.go`.\n\n**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.\n\n### Workarounds\n\nSet `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.\n\nNeither is a substitute for upgrading.","severity":"medium","score":5.9,"published":"2026-11-10T17:58:40.428Z","modified":"2026-11-13T15:33:27.769Z","withdrawn":false,"knownExploited":false,"affected":[{"ecosystem":"Go","name":"github.com/pgEdge/pgedge-rag-server","sources":[{"name":"OSV · GHSA-w437-9mwm-j6vq","url":"https://osv.dev/vulnerability/GHSA-w437-9mwm-j6vq"}],"ranges":[{"events":[{"introduced":"0"},{"fixed":"1.0.1-0.20260729020411-a09d4872356b"}],"type":"SEMVER"}],"versions":[],"fixed":["1.0.1-0.20260729020411-a09d4872356b"]}],"sourceAffected":[],"references":["https://github.com/pgEdge/pgedge-rag-server/security/advisories/GHSA-w437-9mwm-j6vq","https://nvd.nist.gov/vuln/detail/CVE-2026-125325","https://github.com/pgEdge/pgedge-rag-server/pull/44","https://github.com/pgEdge/pgedge-rag-server/commit/a09d4872356b510c81f11591845445c33ff45a84","https://github.com/pgEdge/pgedge-rag-server","https://github.com/pgEdge/pgedge-rag-server/releases/tag/v2.0.0"],"sources":[{"name":"OSV","id":"GHSA-w437-9mwm-j6vq","modified":"2026-11-12T19:45:03.186145298Z","url":"https://osv.dev/vulnerability/GHSA-w437-9mwm-j6vq"},{"name":"CVE","id":"CVE-2026-125325","modified":"2026-11-13T15:33:27.769Z","url":"https://www.cve.org/CVERecord?id=CVE-2026-125325"}],"assessments":[{"source":"OSV","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","score":5.9},{"source":"GitHub_M","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","score":5.9}],"cve":{"records":[{"id":"CVE-2026-125325","source":"GitHub_M","state":"PUBLISHED","reasons":[],"replacements":[],"disputed":false,"unsupportedWhenAssigned":false,"reserved":"2026-11-09T21:22:55.597Z","published":"2026-11-10T17:58:40.428Z","modified":"2026-11-13T15:33:27.769Z"}],"publishers":[{"name":"GitHub_M","role":"CNA","organizationId":"a0819718-46f1-4df5-94e2-005712e83aaa","modified":"2026-11-10T17:58:40.428Z"},{"name":"CISA-ADP","role":"ADP","organizationId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","modified":"2026-11-13T15:33:27.769Z"}],"references":[{"url":"https://github.com/pgEdge/pgedge-rag-server/security/advisories/GHSA-w437-9mwm-j6vq","tags":["x_refsource_CONFIRM"],"source":"GitHub_M"},{"url":"https://github.com/pgEdge/pgedge-rag-server/pull/44","tags":["x_refsource_MISC"],"source":"GitHub_M"},{"url":"https://github.com/pgEdge/pgedge-rag-server/commit/a09d4872356b510c81f11591845445c33ff45a84","tags":["x_refsource_MISC"],"source":"GitHub_M"},{"url":"https://github.com/pgEdge/pgedge-rag-server/releases/tag/v2.0.0","tags":["x_refsource_MISC"],"source":"GitHub_M"}],"weaknesses":[{"id":"CWE-362","description":"CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization","source":"GitHub_M"},{"id":"CWE-488","description":"CWE-488: Exposure of Data Element to Wrong Session","source":"GitHub_M"}],"applicability":[],"prioritization":[{"source":"CISA-ADP","type":"SSVC","role":"CISA Coordinator","timestamp":"2026-11-13T15:33:16.391558Z","decisions":[{"name":"Exploitation","value":"none"},{"name":"Automatable","value":"no"},{"name":"Technical Impact","value":"partial"}]}]},"products":[{"vendor":"pgEdge","name":"pgedge-rag-server","platforms":[],"versions":[{"version":"< 2.0.0","status":"affected"}],"cpes":[],"source":"GitHub_M","url":"https://www.cve.org/CVERecord?id=CVE-2026-125325"}],"remediation":[],"observedAt":"2026-11-13T23:30:44.695Z","kev":{"status":"not-listed","checkedAt":"2026-11-15T02:25:31.038Z"},"coverage":[{"source":"NVD","status":"available","checkedAt":"2026-11-10T18:20:35.367Z","attemptedAt":"2026-11-10T18:20:35.367Z"},{"source":"GHSA","status":"no-result","checkedAt":"2026-11-10T18:20:35.589Z","attemptedAt":"2026-11-10T18:20:35.589Z"},{"source":"EUVD","status":"no-result","checkedAt":"2026-11-10T18:20:35.944Z","attemptedAt":"2026-11-10T18:20:35.944Z"},{"source":"EPSS","status":"no-result","checkedAt":"2026-11-10T18:20:34.795Z","attemptedAt":"2026-11-10T18:20:34.795Z"}],"evidence":[{"source":"NVD","id":"CVE-2026-125325","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-125325","modified":"2026-11-10T18:17:33.857","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","checkedAt":"2026-11-10T18:20:35.367Z"}],"aiSummary":{"text":"The pgEdge RAG Server's shared keyword index leaks results between concurrent unauthenticated requests, potentially exposing documents from one caller to another. This affects versions 1.0.0 or earlier. Normal load is enough to trigger the issue, with no injection or malformed input required.","model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","generatedAt":"2026-11-14T02:06:11.422Z","sources":[{"name":"OSV","url":"https://osv.dev/vulnerability/GHSA-w437-9mwm-j6vq"},{"name":"CVE","url":"https://www.cve.org/CVERecord?id=CVE-2026-125325"}]}}