Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify draw.io instance with proxy enabled
-
DeliveryRegister rebinding hostname flipping public↔metadata IP
-
ExploitSubmit URL to image proxy endpoint
-
InstallPass single-resolution private-address check
-
C2Race second DNS resolution at connection open
-
ExecuteProxy fetches internal/metadata service
-
ImpactExfiltrate cloud credentials or internal responses
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a draw.io server deployment started with the environment variable ENABLE_DRAWIO_PROXY=1, which activates the ProxyServlet image proxy - installs without this flag, as well as the SaaS and desktop editions, are not exposed. Exploitation is unauthenticated and remote against that proxy endpoint, but is LIMITED by a DNS-rebinding timing race: the attacker-controlled hostname must resolve to a permitted public address during Utils.sanitizeUrl() validation and then to a private, link-local, or 169.254.169.254 cloud-metadata address by the time URL.openConnection() performs the second resolution (hence CVSS AC:H). Impact is highest when the server runs in a cloud environment with a reachable instance metadata service or internal-only HTTP services; it is read-only (no integrity or availability impact). |
| Impact | This is a legitimate but conditional SSRF, not a high-severity emergency. The CVSS 3.1 vector (6.8, AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N) is internally consistent with the DNS-rebinding root cause: AV:N because the proxy endpoint is network-reachable, PR:N because draw.io's image proxy is typically unauthenticated, AC:H because success requires winning a DNS time-of-check/time-of-use race (the hostname must resolve public during Utils.sanitizeUrl() and private/link-local/metadata during URL.openConnection()), S:C because attacker reads data from separate internal/cloud-metadata systems, and C:H/I:N/A:N because the payoff is read-only exfiltration of cloud instance metadata or internal HTTP responses with no write or availability impact. No EPSS score, no CISA KEV listing, and no public exploit are present in the supplied intelligence, so this is 'no public exploit identified at time of analysis.' The strongest mitigating signal is the gating condition: only deployments running with ENABLE_DRAWIO_PROXY=1 are affected, which narrows the exposed population well below the raw popularity of draw.io. Net: patch on a normal cycle for self-hosted proxy-enabled instances, especially those in cloud (IMDS-reachable) environments; treat it as lower priority for SaaS/desktop users and installs with the proxy disabled. No conflicting signals were found between the CVSS vector and the description - both agree on unauthenticated network access with a rebinding race. |
| Exploit ScenarioDerived | An attacker registers a hostname under their control whose DNS record flips between a public IP and 169.254.169.254 (cloud metadata) or an internal RFC1918 address, then submits it to a self-hosted draw.io instance's image proxy (ENABLE_DRAWIO_PROXY=1). The first resolution passes the private-address allow check, but by the time ProxyServlet calls URL.openConnection() the record has flipped, so the proxy fetches internal or metadata content and returns it to the attacker. No public exploit is identified, and the AC:H rating reflects the DNS timing race that must be won. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Server-side request forgery in self-hosted draw.io deployments prior to 30.2.7 allows unauthenticated remote attackers to make the server fetch attacker-chosen URLs that resolve to private, link-local, or cloud-metadata addresses, returning internal HTTP responses or instance metadata through the image proxy. The flaw only exists when the server is started with ENABLE_DRAWIO_PROXY=1; the SaaS and desktop editions and default installs are unaffected. Successful exploitation depends on a DNS-rebinding timing race (the hostname must resolve to a public address during validation and to an internal address at connection time), which is why the assessed severity is 6.8 with AC:H rather than a high-severity rating; there is no public exploit code identified at time of analysis and the issue is not in CISA KEV. Vendor-released patch: 30.2.7.
RemediationAI
Upgrade to draw.io server 30.2.7, which pins connections to the validated IP via Utils.openPinnedConnection() and checks redirects the same way - see the advisory at https://github.com/jgraph/drawio/security/advisories/GHSA-3v4h-8r2c-m8c5, the fix commit https://github.com/jgraph/drawio/commit/650fbd742814f6502f78248dc2d8e2aaa5e42b5e, and the release https://github.com/jgraph/drawio/releases/tag/v30.2.7. If upgrading immediately is not possible, the primary compensating control is to remove the exposure entirely by unsetting ENABLE_DRAWIO_PROXY (or setting it to 0) and restarting the server; the trade-off is that the external image proxy stops functioning, so diagrams that embed remote images fetched through the proxy will no longer render them. Because exploitation requires the server to reach an internal target, egress filtering is a strong secondary control: deny outbound connections from the draw.io container to RFC1918 ranges, 127.0.0.0/8, and 169.254.0.0/16 (including the cloud metadata endpoint 169.254.169.254), and prefer blocking egress by default with an explicit allowlist of hosts the proxy legitimately needs - this can break other integrations that rely on internal URLs. Additionally, require IMDSv2 on AWS instances and apply equivalent hardened metadata configurations on other clouds so that a successful SSRF cannot retrieve credentials. Note that the 30.2.7 release also carries fixes for a path-traversal issue in ExportProxyServlet and an OAuth state/CSRF enforcement gap, so the upgrade is worthwhile beyond this CVE.
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 weakness is CWE-918 (Server-Side Request Forgery) implemented as a classic time-of-check-to-time-of-use (TOCTOU) DNS validation gap in the Java image-proxy code path. In affected versions, src/main/java/com/mxgraph/online/Utils.java's Utils.sanitizeUrl() performs a single DNS resolution of the caller-supplied URL and verifies that the resulting address is not private, link-local, or otherwise internal. src/main/java/com/mxgraph/online/ProxyServlet.java then calls URL.openConnection() on the same hostname, triggering a second, independent DNS resolution. Because the hostname is never pinned to the address that was validated, an attacker controlling DNS for that hostname can answer the first query with a benign public IP and the second query with 127.0.0.1, 169.254.169.254, or another RFC1918/link-local target, causing the server to issue an HTTP request to an internal endpoint. The CVSS vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N reflects that access is network-based and unauthenticated (PR:N) with no user interaction, but the rebinding race makes exploitation non-trivial (AC:H); the scope change (S:C) captures that the vulnerable component is leveraged to reach resources outside its intended authority, and the impact is confidentiality-only (metadata/internal service response disclosure) with no integrity or availability effect. The 30.2.7 fix replaces the boolean check with Utils.validatedAddress() returning the validated InetAddress and rewires ProxyServlet to use Utils.openPinnedConnection(), so the connection is bound to the address that was actually validated; the redirect-following path is hardened the same way. The same release also bundles fixes for a path-traversal issue in ExportProxyServlet (GHSA-3pq9-9hg4-ggfw) and an OAuth state/CSRF check enforcement change on non-GAE deployments (GHSA-mcj5-3pww-7g49).
Know when Drawio 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:N/S:C/C:H/I:N/A:N
Unauthenticated network-reachable proxy (AV:N/PR:N), DNS-rebinding race raises AC:H, reading separate internal/metadata systems gives S:C/C:H, and the read-only SSRF has no I/A impact.
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, deployments with ENABLE_DRAWIO_PROXY=1 are vulnerable to server-side request forgery because src/main/java/com/mxgraph/online/Utils.java performs the private-address check in Utils.sanitizeUrl() using one DNS resolution, while src/main/java/com/mxgraph/online/ProxyServlet.java later calls URL.openConnection() and performs a second resolution. An attacker-controlled hostname can resolve to a public address during validation and then to a private, link-local, or cloud metadata address when the connection is opened. Successful exploitation can return cloud instance metadata or responses from internal HTTP services through the proxy. 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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
OS Command Injection in GitHub repository jgraph/drawio prior to 21.5.0. Rated critical severity (CVSS 9.8), this vulner
Arbitrary Code Execution through Sanitizer Bypass in GitHub repository jgraph/drawio prior to 18.0.0. Rated critical sev
Improper Input Validation in GitHub repository jgraph/drawio prior to 18.0.6. Rated high severity (CVSS 8.8), this vulne
OS Command Injection in GitHub repository jgraph/drawio prior to 20.3.0. Rated high severity (CVSS 7.8), this vulnerabil
Denial of Service in GitHub repository jgraph/drawio prior to 18.1.3. Rated high severity (CVSS 7.5), this vulnerability
Improper Access Control in GitHub repository jgraph/drawio prior to 20.2.8. Rated high severity (CVSS 7.5), this vulnera
Exposure of Sensitive Information to an Unauthorized Actor in GitHub repository jgraph/drawio prior to 18.1.2. Rated hig
Server-Side Request Forgery (SSRF) in GitHub repository jgraph/drawio prior to 18.0.8. Rated high severity (CVSS 7.5), t
Server-Side Request Forgery (SSRF) in GitHub repository jgraph/drawio prior to 18.0.7. Rated high severity (CVSS 7.5), t
Server-Side Request Forgery (SSRF) in GitHub repository jgraph/drawio prior to 18.0.5. Rated high severity (CVSS 7.5), t
Server-Side Request Forgery (SSRF) in GitHub repository jgraph/drawio prior to 18.0.6. Rated high severity (CVSS 7.5), t
Path Traversal in WellKnownServlet in GitHub repository jgraph/drawio prior to 18.0.5. Rated high severity (CVSS 7.5), t
EUVD-2026-84007
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB