Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCompromise or prompt-inject upstream MCP client
-
DeliverySupply crafted export_id to export tool
-
ExploitBreak out of export(id:"...") selection
-
ExecutionAppend root-level GraphQL selections
-
PersistQuery executes under operator API key
-
ImpactDisclose schema/introspection data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Query language parameterization
|
| Exploitation Conditions | Requires the Rapid7 Bulk Export MCP server (versions 0.2.5 through 0.6.1) to be deployed and configured with a valid Rapid7 API key, and the attacker must be able to influence the export_id argument passed to the check_rapid7_export_status or download_rapid7_export MCP tools - realistically via a compromised/careless upstream MCP client or indirect prompt injection forwarding an unvalidated identifier. Limiting factors: all injected queries execute only within the operator's own already-authenticated API scope and cannot cross a tenant or account boundary, so a directly-malicious operator gains nothing beyond calling the API directly; impact is confined to confidentiality (e.g. schema introspection) with no integrity or availability effect. Fixed in 0.6.2, which passes export_id as a parameterized GraphQL variable. |
| Impact | This is a low-priority, high-nuance issue whose signals are internally consistent: the NVD CVSS of 2.7 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N) correctly reflects that exploitation runs entirely within the operator's own already-authenticated Rapid7 API scope and cannot cross a tenant or account boundary - a directly-malicious operator gains nothing they could not already do. There is no EPSS score, no CISA KEV listing, and no public exploit identified at time of analysis, so all exploitation signals point the same direction as the low base score. The one genuinely interesting risk driver is not captured cleanly by the CVSS vector: because this is an MCP tool, the realistic exposure is a compromised/careless upstream MCP client or indirect prompt injection that forwards an unvalidated export_id, meaning the practical 'attacker' may be low- or zero-privilege even though the injected query executes under the operator's high-privilege API key. Impact is confined to confidentiality (C:L, e.g. GraphQL schema introspection) with no integrity or availability effect. Bottom line: real but minor - patch during normal maintenance; not an emergency. |
| Exploit ScenarioDerived | An operator runs the Rapid7 Bulk Export MCP server (0.2.5-0.6.1) and an upstream LLM client is steered by indirect prompt injection to invoke check_rapid7_export_status or download_rapid7_export with a crafted export_id containing quote and brace characters. The malicious identifier terminates the intended export(id: "...") selection early and appends attacker-controlled root-level GraphQL selections (such as schema introspection), which execute under the operator's own valid API key. No public exploit code is known, and the attack yields no cross-tenant access - only information reachable within the operator's existing API scope. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
GraphQL query injection in Rapid7 Bulk Export MCP 0.2.5 through 0.6.1 allows an authenticated high-privileged actor who can influence the export_id argument used by the check_rapid7_export_status and download_rapid7_export tools to terminate the intended export(id: "...") selection and append attacker-controlled root-level selections such as schema introspection. The impact is confined to confidentiality (CVSS 2.7, CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N), because every injected query executes inside the operator's own already-authenticated Rapid7 API key scope and cannot cross a tenant or account boundary - a directly-malicious operator gains nothing beyond what direct API access already provides, so realistic exposure requires a compromised or careless upstream MCP client or indirect prompt injection forwarding an unvalidated identifier. There is no confirmed active exploitation (not in CISA KEV) and no public exploit identified at time of analysis; the vendor-released fix is version 0.6.2, which parameterizes export_id as a GraphQL variable.
RemediationAI
Vendor-released patch: upgrade Rapid7 Bulk Export MCP to version 0.6.2, which passes export_id as a parameterized GraphQL variable ($exportId: ID!) instead of interpolating it into the query string; the fix is delivered in the v0.6.2 release and referenced PR https://github.com/rapid7/rapid7-bulk-export-mcp/pull/47, documented at https://github.com/rapid7/rapid7-bulk-export-mcp/releases/tag/v0.6.2 (the same release also bumps anyio to 4.14.2). Because this is a low-severity, low-priority defect whose exploitation is bounded by the operator's own API scope, upgrading is the complete fix and no emergency compensating controls are required; where immediate upgrade is not possible, the practical mitigations are to constrain who and what can drive the export_id argument - restrict which upstream MCP clients may invoke check_rapid7_export_status and download_rapid7_export so that only trusted, non-compromised clients supply identifiers, and enforce an allowlist or strict identifier format (for example UUID-shaped export IDs) on export_id before it reaches the tool, accepting that such filtering is a partial substitute for the vendor's parameterized-query fix and could break legitimate non-standard identifiers. Operators deploying this MCP server should additionally treat the configured Rapid7 API key as a scoped asset, since any injected query runs with that key's privileges, and review MCP client logs for export_id values containing quote or brace characters as an indicator that an unvalidated identifier was forwarded via indirect prompt injection.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The Rapid7 Bulk Export MCP server is a Python Model Context Protocol integration whose src/export_manager.py defines get_export_status, reached through the check_rapid7_export_status and download_rapid7_export MCP tools. The flaw is CWE-943 (improper neutralization of special elements in data query logic): the tool argument export_id is unvalidated and string-interpolated directly into a GraphQL document of the form export(id: "..."), so quote and brace characters in the identifier close the string literal and the selection set early, then append an attacker-chosen root-level selection (for example an introspection query) that still arrives as one syntactically well-formed GraphQL document at the Rapid7 export API. GraphQL is a typed query language, not SQL, which is why the injection is a query-logic/data-query neutralization defect rather than classic SQL injection; the correct defense is to keep untrusted values out of the query text and bind them as declared GraphQL variables. Notably, the injected operation is transmitted under the operator's own valid API key and authorization scope, which is the reason the assessed vector is PR:H with scope Unchanged and impact limited to low confidentiality (schema introspection and similar read-only disclosure), with no integrity or availability effect and no tenant or account boundary crossing. The 0.6.2 release note ties the fix to a change that passes export_id as a parameterized GraphQL variable ($exportId: ID!) alongside an anyio dependency bump to 4.14.2; the EUVD entry maps affected platform versions as 0 <0.6.2, and the CPE string cpe:2.3:a:rapid7:platform:*:*:*:*:*:*:*:* reflects the Rapid7 platform product mapping.
Know when Graphql gets its next vulnerability
- 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
AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N
Injection executes under the operator's own high-privilege API key (PR:H) with no scope crossing (S:U); only introspection-style disclosure (C:L), no integrity/availability impact.
Primary rating from Vendor (rapid7).
CVSS VectorVendor: rapid7
Lifecycle Timeline
1DescriptionCVE.org
Rapid7 Bulk Export MCP versions 0.2.5 through 0.6.1 suffer from a GraphQL query injection issue in the export-status component (get_export_status in src/export_manager.py), whereby the export_id value - an unvalidated MCP tool argument reaching the function via the check_rapid7_export_status and download_rapid7_export tools - is interpolated directly into the GraphQL query string. A crafted export_id containing quote and brace characters can terminate the intended export(id: "...") selection early and append attacker-controlled root-level selections (for example, schema introspection), producing a single well-formed GraphQL document that is then sent to the Rapid7 export API under the operator's own API key.
Notably, this issue does not grant an existing actor any access they do not already have: every injected query executes within the operator's own already-authenticated API scope, using the operator's own valid API key, and cannot cross a tenant or account boundary. A directly-malicious operator gains nothing they could not already do by calling the API directly; the realistic exposure is limited to a compromised or careless upstream MCP client, or indirect prompt injection forwarding an unvalidated identifier. This is fixed in version 0.6.2, which passes export_id as a parameterized GraphQL variable ($exportId: ID!).
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
NoSQL injection exploits databases that don't use traditional SQL syntax-like MongoDB, CouchDB, or Redis-by manipulating queries through unsanitized user input.
Unauthenticated denial of service in GitLab CE/EE (all versions from 18.4.6 before 19.1.8, 19.2 before 19.2.6, and 19.3
Unauthenticated attackers can publish arbitrary persisted query documents and claim (squat) query aliases on WordPress s
Stump through 0.1.10 allows any authenticated user with the shared AccessSmartList permission to overwrite, delete, or t
Versions of the package graphql from 16.3.0 and before 16.8.1 are vulnerable to Denial of Service (DoS) due to insuffici
Server-side request forgery in Chaskiq through 2.0.3 allows unauthenticated attackers to make the server fetch arbitrary
Prototype pollution in `@graphql-tools/utils` `mergeDeep()` lets a remote, unauthenticated client submit a single aliase
JWT authentication bypass in @neo4j/graphql allows unauthenticated remote clients to forge arbitrary JWT claims over Gra
Uncontrolled resource consumption in the Strawberry GraphQL library's legacy graphql-ws subscription handler (versions 0
Authentication bypass in @neo4j/graphql exposes admin-restricted custom-resolver fields to any authenticated user holdin
silverstripe-graphql is a package which serves Silverstripe data in GraphQL representations. Rated high severity (CVSS 7
`silverstripe/graphql` serves Silverstripe data as GraphQL representations. Rated high severity (CVSS 7.5), this vulnera
Field-level read permission bypass in Twenty CRM before 2.22.0 lets an authenticated workspace member or API key that is
EUVD-2026-86930
GHSA-pwmm-7g3w-8pvp
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB