Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker obtains own cloud OAuth auth code
-
DeliveryCraft callback URL embedding attacker code
-
ExploitPhish victim to visit callback on self-hosted draw.io
-
ExecutionState check skipped (IS_GAE false)
-
PersistVictim session bound to attacker identity
-
ImpactVictim saves diagrams into attacker storage
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Anti-CSRF tokens, SameSite cookies
MITRE ATT&CK
1 technique across 1 tactic: Initial Access 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 self-hosted draw.io deployment running as Docker or WAR where IS_GAE is false (the Google App Engine / app.diagrams.net SaaS build sets IS_GAE=true and is NOT affected). At least one OAuth cloud-storage integration must be configured (Google Drive, OneDrive, GitHub, GitLab, or Dropbox - the shared AbsAuth handler covers all five). The attacker must first complete a legitimate OAuth authorization for their OWN cloud account to obtain a valid authorization code, then induce the victim to visit the crafted callback URL (UI:R - user interaction / social engineering required). Limiting factors: the attack yields only attacker-controlled identity binding, not read access to the victim's existing cloud files, and it fails against the hosted SaaS and any GAE-based deployment. |
| Impact | This is a genuinely low-to-moderate priority issue, and the signals agree rather than conflict. The vendor CVSS of 4.2 (AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N) accurately captures a login-CSRF / OAuth identity-fixation flaw: network-reachable and unauthenticated (PR:N) but requiring both attacker preparation (obtaining a valid authorization code for the attacker's own cloud-storage account) and victim interaction (UI:R - the victim must click the crafted callback URL) mid-OAuth-flow, hence AC:H. Impact is deliberately bounded to C:L/I:L because the description explicitly states the identity binding does NOT grant access to the victim's existing cloud files - it only causes the victim's session to act under the attacker's identity (misattribution). No EPSS score, no CISA KEV listing, and no public exploit code were provided, so there is no public exploit identified at time of analysis. This is a real, correctly-scoped session-integrity bug, not a high-CVSS-but-hollow finding, but the low impact ceiling plus AC:H and UI:R mean it is not an urgent patch for most defenders. Note also the exposure is gated: only self-hosted Docker/WAR deployments (IS_GAE=false) are affected - the hosted app.diagrams.net SaaS running on GAE was never vulnerable, confirmed by the code path (IS_GAE-gated check). |
| Exploit ScenarioDerived | An attacker starts an OAuth flow with (e.g.) Google Drive using their own account, captures the resulting authorization code, and crafts a draw.io callback URL embedding that code. They phish a victim who uses a self-hosted draw.io Docker/WAR instance into clicking the link; because the non-GAE code path skips the state/cookie token comparison, the victim's draw.io session silently binds to the attacker's cloud-storage identity, and any diagrams the victim saves land in the attacker's storage. No public exploit code was provided, but the flaw is straightforward to reproduce given the disclosed root cause. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Self-hosted draw.io deployments running the Docker or WAR build prior to 30.2.7 can have a victim's browser session silently bound to the attacker's own cloud-storage identity, because the OAuth callback handler skips verification of the state token against the session cookie whenever IS_GAE is false. An attacker who completes a legitimate authorization for their own account can then induce a victim to open a crafted callback URL, causing subsequent Google Drive, OneDrive, GitHub, GitLab, or Dropbox actions to be performed under the attacker's identity (CVSS 4.2, CVSS:3.1/AV:N/AC:H/PR:N/UI:R, CWE-352); the impact is session integrity loss and misattribution rather than disclosure of the victim's existing cloud files, and no public exploit identified at time of analysis. The hosted SaaS at app.diagrams.net and any Google App Engine build set IS_GAE=true and are unaffected.
RemediationAI
Vendor-released patch: upgrade to draw.io 30.2.7, which is published at https://github.com/jgraph/drawio/releases/tag/v30.2.7 and enforces the OAuth state check on non-GAE deployments via commit 650fbd742814f6502f78248dc2d8e2aaa5e42b5e; verify the running VERSION file reports 30.2.7 after redeploying the Docker image or WAR (the fix fails closed when stateToken or cookieToken is null, so no configuration toggle is needed). If upgrading immediately is not possible, the most effective compensating control is to disable the OAuth cloud-storage integrations on the self-hosted instance - for example by removing the configured clientId/client secret for Google Drive, OneDrive, GitHub, GitLab and Dropbox - which removes the vulnerable callback path entirely at the cost of losing cloud import/export and remote save functionality; a weaker alternative is to keep only integrations authenticated through top-level or popup windows with partitioned cookies, since iframe-embedded flows that strip the state cookie are precisely the case the patch refuses to accommodate. Operators should additionally treat any pre-upgrade session as untrustworthy, since it may already be bound to an attacker identity: instruct users to clear draw.io cookies and re-authenticate after patching, and note that hosted/GApp Engine deployments require no action because IS_GAE=true bypasses the vulnerable branch. Details and vendor guidance are in the advisory https://github.com/jgraph/drawio/security/advisories/GHSA-mcj5-3pww-7g49.
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 issue is a classic Cross-Site Request Forgery weakness (CWE-352) in the OAuth 2.0 authorization-code flow implemented by the shared Java handler src/main/java/com/mxgraph/online/AbsAuth.java. The OAuth 'state' parameter exists to bind a callback to the browser session that initiated it; draw.io caches the issued state token and compares it to a cookie returned on callback. In builds where the Google App Engine cache stub is not in use (IS_GAE false), the code path was written as 'IS_GAE && (stateToken null || !stateToken.equals(cookieToken))', so the comparison was short-circuited entirely on self-hosted Docker and WAR servers - the guard only executed on GAE. Commit 650fbd742814f6502f78248dc2d8e2aaa5e42b5e in release 30.2.7 changes this to a fail-closed check ('stateToken null || cookieToken null || !stateToken.equals(cookieToken)') and documents the rationale, noting that flows in third-party/iframe contexts where the cookie is stripped must use top-level or popup authentication or a partitioned cookie instead of weakening the check. Because driver classes for Google Drive, OneDrive, GitHub, GitLab and Dropbox all extend AbsAuth, a single defect affects all five integrations; the CPE cpe:2.3:a:jgraph:drawio:*:*:*:*:*:*:*:* covers the affected jgraph/drawio product line. The same 30.2.7 release also hardened the image ProxyServlet against DNS-rebinding SSRF (GHSA-3v4h-8r2c-m8c5) and the ExportProxyServlet against path traversal (GHSA-3pq9-9hg4-ggfw), so the update bundles several unrelated fixes.
Know when Java 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:H/PR:N/UI:R/S:U/C:L/I:L/A:N
Network-reachable and unauthenticated (PR:N) but needs attacker-prepared auth code plus victim click (AC:H, UI:R); impact limited to session integrity/misattribution, no file access, so C:L/I:L/A:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
draw.io is a configurable diagramming and whiteboarding application. Prior to version 30.2.7, the OAuth callback handler in src/main/java/com/mxgraph/online/AbsAuth.java skips comparison of stateToken and cookieToken whenever IS_GAE is false, which affects self-hosted Docker and WAR deployments. An attacker can provide an authorization code for the attacker's cloud-storage identity and induce a victim to visit a callback URL, causing the victim's draw.io session to become authenticated as the attacker identity without a valid state binding. The shared handler affects Google Drive, OneDrive, GitHub, GitLab, and Dropbox integrations. The victim can then unknowingly perform cloud-storage actions under the attacker's identity, causing session integrity loss and misattribution, but the identity binding does not itself grant access to existing victim cloud files. This issue is fixed in version 30.2.7.
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
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
EUVD-2026-84008
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB