Code Graph RAG structural tools follow out-of-root symlinks
CVE-2026-87008GHSA-85gg-2gfq-q95m
What to do
Vendor fix available. Upgrade each affected package to the fixed version on its release line (code-graph-rag 0.0.587), redeploy, then verify what is actually installed.
This page has no inventory attached, so it cannot say whether you are affected. A vendor fix is not proof that your deployment is fixed.
Affected packages
PyPI code-graph-rag
- Affected
- < 0.0.587
- Fixed in
- 0.0.587
Sources
- GitHub Advisory Database and maintainer security advisories on GitHub
GitHub-reviewed advisory GHSA-85gg-2gfq-q95m lists affected ranges: PyPI code-graph-rag >=0 <=0.0.586
VerifiedObserved Structured GitHub Advisory Database record (type=reviewed) from the GitHub REST API.
- Open Source Vulnerabilities (OSV.dev), including the GitHub Advisory Database
OSV record GHSA-85gg-2gfq-q95m lists affected ranges: PyPI code-graph-rag >=0 <0.0.587 (fixed)
VerifiedObserved Structured OSV record; GitHub-reviewed advisory.
Severity and exploitation
- Exploitation
- No confirmed exploitation recorded. Patch Next marks exploitation only from CISA KEV.
- CVSS
- 7.1 · CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
- EPSS
- CVE-2026-87008: 0.26% estimated exploitation activity in the next 30 days; percentile 18.39 (FIRST EPSS, 2026-11-10). This is a model estimate, not proof of exploitation or customer exposure.
Source description
As published by the source; long descriptions are shortened.
A remote/local attacker who can get a symbolic link included in a source-code repository that code-graph-rag analyzes can cause the `structural_search` and `structural_replace` tools (backed by `AstGrepService`, exposed both as MCP tools and as agentic AI tools) to read and -- via `structural_replace` with `dry_run=False` -- overwrite arbitrary files outside the configured project root, because the tool's path-containment check (`should_skip_path`/`_classify_file`) is performed lexically on the unresolved path and never checks `Path.is_symlink()` or calls `.resolve()`, unlike the project's own (correct) `validate_project_path` decorator used elsewhere. Tested at commit `90a3ed3cbdc7d3bb8036985b851cc7c9a3ba9c57` (pyproject version 0.0.550), current `main` at test time. Confirmed this commit already contains the fix for the prior advisory (GHSA-vvr2-h2jp-838m: paginated `read_file` path traversal) and the newer HTTP-MCP bearer-auth gate (`_validate_http_exposure` in…
Dates and revisions
- Published by the source
- Last modified by the source
- Source last checked
- Revision 2 · amended ·
Amended from osv record GHSA-85gg-2gfq-q95m
- Revision 1 · created ·
Published from ghsa record GHSA-85gg-2gfq-q95m
Agent brief
Preview the exact text before you copy it. Commands are read-only suggestions; review them before running anything.
# Patch Next advisory brief: CVE-2026-87008 Advisory: Code Graph RAG structural tools follow out-of-root symlinks IDs: CVE-2026-87008, GHSA-85gg-2gfq-q95m Record: https://patchnext.com/advisories/cve-2026-87008 (revision 2, source checked 10 Nov 2026, 06:35 UTC) Inventory: none attached. This brief comes from a public page and does not say whether any deployment is affected. Severity: High (CVSS 7.1) Exploitation: no confirmed exploitation recorded. Patch Next confirms exploitation only from CISA KEV. Vendor response: Vendor fix available; fixed versions by package: code-graph-rag 0.0.587. A vendor fix does not mean a deployment is fixed. ## Affected components - PyPI code-graph-rag: affected < 0.0.587; fixed in 0.0.587 ## Suggested inspection (read-only) - `python -m pip show code-graph-rag`: prints the installed version. Run with the environment that serves production active. ## Supported action Upgrade each affected component to a fixed version on its release line. For a transitive dependency, upgrade the parent package or add an override or constraint, then regenerate the lockfile. Redeploy every environment that ran an affected version. ## Required regression checks - Run the test suite and a production build. - Exercise the features that depend on code-graph-rag. - Repeat the inspection and confirm that only fixed versions remain installed. ## Rollback considerations - Keep the previous lockfile and deployment artifact. Rolling back reinstates the vulnerable version, so apply any documented mitigation while you fix forward. ## Unresolved questions - Which deployments run an affected version? - Exploitation status can change. Check again before lowering the priority. - Mark the work resolved only after the fixed version is verified in production. ## Sources - Verified: https://github.com/advisories/GHSA-85gg-2gfq-q95m (GitHub-reviewed advisory GHSA-85gg-2gfq-q95m lists affected ranges: PyPI code-graph-rag >=0 <=0.0.586) - Verified: https://osv.dev/vulnerability/GHSA-85gg-2gfq-q95m (OSV record GHSA-85gg-2gfq-q95m lists affected ranges: PyPI code-graph-rag >=0 <0.0.587 (fixed)) Commands are suggestions: review each one before running it.
Loading voting…