Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as subscriber
-
DeliveryOpen GraphQL subscription on target resource
-
ExploitTrigger two rapid events for unauthorized records within batch window
-
ExecutionBatch interval elapses without first-event filter applied to batch tail
-
ImpactUnauthorized record payload delivered over WebSocket
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Three conditions must hold simultaneously: (1) The attacker is an authenticated user with a valid GraphQL subscription open on ash_graphql (PR:L - unauthenticated exploitation is not possible); (2) at least two subscription notification events for records the attacker is not authorized to access must arrive within the same batch interval, which defaults to one second (AT:P - the specific timing prerequisite that prevents trivial single-event exploitation); (3) ash_graphql 1.4.0-1.10.x must be deployed with GraphQL subscriptions enabled and the Batcher running (batching is the default path). Limiting factors: read-only confidentiality impact only (no write or availability exposure); restricted to subscription-capable deployments, not standard GraphQL queries or mutations; timing dependency limits reliable exploitation to scenarios with high event rates or attacker-controlled event triggers. |
| Impact | The CVSS 4.0 score of 2.3 (AV:N/AC:L/AT:P/PR:L/UI:N/VC:L) correctly reflects a tightly constrained exploitability profile: the attacker must hold a valid authenticated subscriber session (PR:L), and two notifications for unauthorized records must coincide within the same batch window (AT:P - a specific timing prerequisite). Impact is bounded to low-level confidentiality disclosure of subscription field data only; integrity and availability are unaffected. No CISA KEV listing and no public exploit code exist, consistent with a low EPSS expectation for a niche Elixir library. The 'Authentication Bypass' tag in the input metadata is factually wrong - authentication is required per PR:L, and the root cause is authorization logic, not authentication. Real-world prioritization is low-to-medium: the product footprint is limited to Elixir applications using GraphQL subscriptions, exploitation requires both an authenticated subscription and a timing coincidence, and mass automated exploitation is implausible despite the network attack vector. |
| Exploit ScenarioDerived | An authenticated user holds an open GraphQL subscription for a resource type they are not authorized to view. When two or more records of that type are created or updated within a one-second window - for example, a bulk-create operation or rapid sequential writes - the batcher coalesces both events, filters the first via should_send?/1, but delivers the unauthorized data from the second notification directly to the subscriber's WebSocket. The patch regression test in the commit diff confirms this sequence is reliably reproducible; no separate public proof-of-concept has been identified. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAI
GraphQL subscription payloads carrying unauthorized record data leak to authenticated subscribers in ash_graphql 1.4.0-1.10.x due to a missing authorization filter in the batch-processing codepath of AshGraphql.Subscription.Batcher. When two or more subscription notifications arrive within the default one-second batching window, only the first is passed through the should_send?/1 authorization gate; all subsequent notifications in the same batch bypass that check entirely and are published to the subscriber's WebSocket connection. No public exploit has been identified at time of analysis, and a vendor-released patch is available in version 1.11.0.
RemediationAI
Upgrade to ash_graphql 1.11.0 or later, which applies should_send?/1 across the entire notification batch in AshGraphql.Subscription.Batcher, as delivered in patch commit e8e67f39add2ce0771e6db5f086afe68ba212c57. The vendor advisory at https://github.com/ash-project/ash_graphql/security/advisories/GHSA-j684-hch4-q888 confirms 1.11.0 as the remediated release. For deployments that cannot immediately upgrade, a targeted workaround is to set send_immediately_threshold: 0 when starting the Batcher supervisor, which forces every notification to be dispatched immediately rather than batched, eliminating the vulnerable codepath entirely; the trade-off is increased pubsub publish overhead under high event volumes. Disabling GraphQL subscriptions application-wide is a more disruptive but fully effective compensating control if subscriptions are not business-critical.
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
ash_graphql (CPE: cpe:2.3:a:ash-project:ash_graphql) is an Elixir library providing GraphQL bindings for the Ash Framework, including real-time GraphQL subscriptions over WebSocket. The defect is in AshGraphql.Subscription.Batcher.do_send/5, which coalesces subscription events arriving within a configurable batch interval (default: 1 second) before dispatching them. CWE-863 (Incorrect Authorization) applies precisely: the authorization suppression function should_send?/1 - which drops results carrying error codes :forbidden or :not_found, or results with no error code - is correctly applied to the first notification in a batch, but the loop over remaining notifications (read from the process dictionary and re-processed through the pipeline) emits directly to pubsub.publish_subscription/2 guarded only by a not is_nil(record) check. That nil guard cannot catch error-carrying unauthorized results, so they are delivered as-is. The fix, introduced in commit e8e67f39, pipes the full batch through Enum.filter(&should_send?/1) before publishing.
Know when Ash 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Timing condition requiring two events in the same batch window raises AC:H; authenticated subscriber mandatory raises PR:L; only limited subscription field data disclosed so C:L.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Incorrect Authorization vulnerability in ash-project ash_graphql delivers GraphQL subscription payloads for records a subscriber is not authorized to see.
In AshGraphql.Subscription.Batcher, do_send/5 resolves the first notification of a batch and filters it with should_send?/1, which drops results whose errors are coded forbidden or not_found or carry no code, precisely so that unauthorized results are not disclosed. The remaining notifications in the batch are read from the process dictionary, re-run through the pipeline, and appended to the outgoing results without that filter. They reach pubsub.publish_subscription/2, and the not is_nil(record) guard drops only nil records, not error-carrying results. Any two qualifying notifications arriving within the default one-second batch interval suffice, and batching is the default path. The fix applies should_send?/1 to the whole batch.
This issue affects ash_graphql: from 1.4.0 before 1.11.0.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Ash Graphql
View allAshGraphql's Absinthe complexity calculator undercounts nested Relay connection and keyset pagination queries, allowing
Cross-tenant data disclosure in ash_graphql affects authenticated subscribers in multi-tenant deployments running versio
Internal Ash attribute and argument names leak through GraphQL error responses in ash_graphql 1.9.0 through 1.10.x, bypa
Relay node query crash in AshGraphql (ash_graphql 0.27.0 through 1.10.x) allows an unauthenticated remote caller to abor
Cross-session record leakage in ash_graphql's subscription batcher allows one subscriber's resolved GraphQL records to b
EUVD-2026-68284
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB