Skip to main content

draw.io EUVDEUVD-2026-84008

| CVE-2026-63373 MEDIUM
Cross-Site Request Forgery (CSRF) (CWE-352)
2026-09-21 GitHub_M
4.2
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Attacker obtains own cloud OAuth auth code
  2. Delivery
    Craft callback URL embedding attacker code
  3. Exploit
    Phish victim to visit callback on self-hosted draw.io
  4. Execution
    State check skipped (IS_GAE false)
  5. Persist
    Victim session bound to attacker identity
  6. Impact
    Victim 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

drawio < 30.2.7

Affected Packages

euvd drawio fix: 30.2.7

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

Vendor (GitHub_M) PRIMARY 4.2 MEDIUM
AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
vuln.today AI 4.2 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Sep 21, 2026 - 18:02 EUVD

DescriptionCVE.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

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Medium
draw.io very popular but affected subset is self-hosted Docker/WAR deployments only
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

21
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +21
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

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

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy