RAGFlow CVE-2026-121585
LOWAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege tenant
-
DeliveryInvoke Text-To-SQL retrieval
-
ExploitManipulate tableName/kbIDs arguments
-
ExecutionBypass tenant authorization check
-
ImpactRead other tenants' knowledge-base data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization verification
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a valid authenticated low-privilege account on the RAGFlow instance (CVSS PR:L) and that the Text-To-SQL Retrieval feature (the RunSQL / use_sql path) is in use. The attacker then supplies crafted tableName/kbIDs argument values that reference knowledge bases outside their own tenant, defeating the authorization check and enabling cross-tenant read access. Limiting factors that reduce realistic risk: an account is needed (not unauthenticated), the vulnerable retrieval feature must be reachable and in use, impact is read-only disclosure (no integrity/availability effect), and the issue is most consequential only in multi-tenant deployments running affected versions up to 0.27.2/1.0.0-rc2; single-tenant installs have little exposure. |
| Impact | Multiple signals agree this is a low-urgency issue despite being a genuine security flaw. The CVSS 4.0 base score is only 2.1 with vector AV:N/AC:L/AT:N/PR:L/UI:N and impact limited to VC:L (low confidentiality, no integrity or availability impact), and the vuln.today decision label is 'monitor' - not act_now or emergency. The exploit maturity metric E:P (Proof-of-Concept) is consistent with the public PoC reference (ZSH402/RAGFlow-Cross-Tenant-Read) but indicates no confirmed in-the-wild weaponization. There is no CISA KEV listing and no EPSS score was supplied, so widespread automated exploitation is not evidenced. The real-world concern is contextual rather than severity-driven: this is an authorization bypass (CWE-285) in a multi-tenant RAG product, so in shared/SaaS deployments a low-privilege tenant reading another tenant's knowledge-base data is a meaningful confidentiality breach even though the headline score is low. Net assessment: a real but low-priority issue for most single-tenant installs, elevated to a genuine priority only for multi-tenant deployments. Note a conflict to verify: the description locates the flaw in the Go file internal/engine/infinity/sql.go (RunSQL), yet the supplied fix PR #15124 adds a read-only SQL guard in Python (api/db/services/dialog_service.py) - the exact vulnerable code path should be confirmed with the vendor. |
| Exploit ScenarioDerived | A registered low-privilege RAGFlow tenant user issues a Text-To-SQL retrieval request and manipulates the tableName/kbIDs arguments so the generated SQL references knowledge bases belonging to other tenants, bypassing the authorization/tenant-isolation check and reading cross-tenant data. The attack is remote over the network with low complexity but requires a valid authenticated account (PR:L). A public PoC reference exists (ZSH402/RAGFlow-Cross-Tenant-Read); it is not verified as working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 04, 2026
Cross-tenant read exposure in InfiniFlow RAGFlow (through 0.27.2 and 1.0.0-rc2) lets an authenticated low-privilege user query knowledge bases that belong to other tenants through the Text-To-SQL Retrieval feature. Manipulating the tableName/kbIDs arguments passed to RunSQL in internal/engine/infinity/sql.go defeats the ownership check and returns retrieval data from knowledge bases outside the caller's tenant, with confidentiality-only impact and no integrity or availability effect. A public PoC reference exists (github.com/ZSH402/RAGFlow-Cross-Tenant-Read); it is not verified as working exploit code, there is no CISA KEV listing, and the priority decision is monitor - a genuine but low-urgency flaw whose real exposure is limited to multi-tenant deployments that have the retrieval feature reachable.
RemediationAI
No vendor-tagged fixed release is confirmed: the fix exists as upstream PR https://github.com/infiniflow/ragflow/pull/15124, tracked by issue https://github.com/infiniflow/ragflow/issues/15123, so treat patch status as "upstream fix available (PR/commit); released patched version not independently confirmed" and only deploy a tag after verifying the fix commit is actually contained in it. The PR adds a read-only SQL guard (ensure_read_only_sql in common/sql_guard.py) around the use_sql path in api/db/services/dialog_service.py, rejecting statements outside its allowlist; adopting or cherry-picking that guard is the concrete code-level fix, but the diff also bumps the documented Python version to 3.13, so it needs review before backporting. Until a patched build is verified, reduce exposure by disabling the Text-To-SQL Retrieval feature or restricting it to trusted accounts (removes the attack path, at the cost of losing natural-language table queries), and avoid issuing low-privilege accounts in multi-tenant installs or separate tenants onto distinct RAGFlow instances (removes the boundary the flaw crosses, at the cost of operational overhead). Watch https://vuldb.com/vuln/430429 and https://github.com/ZSH402/RAGFlow-Cross-Tenant-Read for the public exploit material.
Affected ProductsAI
RAGFlow releases up to and including 0.27.2 and 1.0.0-rc2 are affected when the Text-To-SQL Retrieval component is in use against the Infinity engine and the RunSQL path in internal/engine/infinity/sql.go is reachable; because the impact is cross-tenant reads, single-tenant installations have little practical exposure while multi-tenant deployments carry the full risk. Tracking and fix material includes the advisory at https://vuldb.com/vuln/430429, the upstream issue https://github.com/infiniflow/ragflow/issues/15123, the fix pull request https://github.com/infiniflow/ragflow/pull/15124, and a public reproduction repository at https://github.com/ZSH402/RAGFlow-Cross-Tenant-Read. No CPE identifiers were supplied with the record, so inventories must be matched on product name and version range rather than machine-readable CPE strings.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
RAGFlow is an open-source retrieval-augmented generation engine; the affected logic sits in the Text-To-SQL Retrieval component, which converts a natural-language question into SQL executed against the Infinity retrieval backend through RunSQL in internal/engine/infinity/sql.go. The root cause class is CWE-285 (Improper Authorization): the kbIDs/tableName value supplied by the caller is carried into the query without confirming that the referenced knowledge base belongs to the caller's tenant, so the authorization decision rests on unvalidated attacker-controlled input. The upstream code evidence linked from the advisory (PR #15124) introduces a read-only SQL guard - ensure_read_only_sql and ReadOnlySqlViolation in common/sql_guard.py - and wires it into the use_sql path in api/db/services/dialog_service.py so non-read-only statements are rejected and repair paths bail out on violation; that same PR also bumps the documented Python version to 3.13, making it a mixed diff rather than an isolated one-line fix. The exact trigger mechanics beyond the tableName/kbIDs manipulation are not described in the available sources.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
Remote authenticated low-privilege tenant (PR:L) crafts tableName/kbIDs to bypass authorization and read other tenants' data; low confidentiality only, no integrity or availability impact.
Primary rating from Vendor (vuldb).
CVSS VectorVendor: vuldb
DescriptionCVE.org
A security flaw has been discovered in InfiniFlow RAGFlow up to 0.27.2/1.0.0-rc2. This impacts the function RunSQL of the file internal/engine/infinity/sql.go of the component Text To SQL Retrieval. The manipulation of the argument tableName/kbIDs results in authorization bypass. The attack may be performed from remote. The exploit has been released to the public and may be used for attacks.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
NVD
CVE.org
GitHub
VulDB
Exploit-DB