CVE-2026-87008vitali87 code-graph-rag path traversal
CVE-2026-87008 is a path traversal in vitali87 code-graph-rag, rated high (7.1 on CVSS 3.1).
Why this priority: High severity, with no exploitation signal yet.
Published · Updated · NVD status: Received
What it is
A file name from the request can climb out of the intended folder with sequences like ../, reaching files the service never meant to expose. The software follows a symbolic link an attacker planted, so it reads or writes a file other than the one it checked.
How it is reached
An attacker can exploit it by someone who can already run code or sign in on the machine, without an account, but someone has to act first, such as opening a file or following a link.
What an attacker gains
A successful attack can read the data it protects and change data or behaviour. In practice, this kind of flaw lets an attacker read or write files outside the folders the service meant to expose.
Is it being exploited?
CISA's SSVC assessment notes a public proof of concept.
What to do
- Upgrade vitali87 code-graph-rag to 0.0.589 or later.
- Limit who can run code or sign in on the hosts that run it.
- Warn the people who use it, and filter files and links on the way in.
Description from NVD
Code Graph RAG is an AI-powered knowledge graph and retrieval system for querying, understanding, and editing multi-language codebases. Prior to 0.0.589, AstGrepService in codebase_rag/tools/ast_grep_service.py enumerates files beneath project_root and relies on should_skip_path in codebase_rag/utils/path_utils.py to classify them, but the containment check operates on unresolved lexical paths. A symbolic link planted inside an analyzed repository can therefore reference a file outside the configured root while still appearing in scope. The structural_search tool follows the link and discloses readable content without an approval gate, while structural_replace with dry_run=False follows it and overwrites writable content; the MCP path invokes structural replacement without the agent-loop approval control. An attacker who causes a victim to analyze a repository containing such a link can read credentials, keys, environment files, or sibling source and can modify files accessible to the code-graph-rag process. This issue is fixed in version 0.0.589.
What this means for your architecture.
A CVE names a product. Whether it matters depends on where that product sits in your systems: what reaches it, which trust boundary it guards and what it can reach once compromised. Veriom maps your components, their relationships and your trust boundaries from your code, cloud and delivery evidence, so you can see where a component like this sits. The radar itself does not look at your systems.
Components it touches
- File storage the service can read or write. The flaw sits between the application and the file system it can reach.
Trust boundaries in play
- Host boundary. The attacker needs a foothold on the machine first; the flaw turns a small foothold into a bigger one.
- People who open files and links. Mail, chat and browsers are the delivery path.
- Between the application and the file system it can reach. An attacker who crosses it can read or write files outside the folders the service meant to expose.
Questions to answer about your own systems
- Where does vitali87 code-graph-rag run in your systems, and at which version?
- Which of those hosts also run code or users you do not fully trust?
- What can it reach once compromised: which data stores, secrets and services?
Sources
- CVE records and CVSS scores from the NVD CVE API. This product uses the NVD API but is not endorsed or certified by the NVD.
- Exploitation status from CISA’s Known Exploited Vulnerabilities catalog.
- Exploit likelihood from FIRST’s Exploit Prediction Scoring System (EPSS), refreshed daily.
- Explanations are written by Veriom from fixed templates over each record’s data, not by a person reviewing each CVE. Descriptions are quoted from the records as published.