Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-reachable unauthenticated attack with no complexity; impact is limited availability only (partial DoS, no confidentiality or integrity loss, scope unchanged).
Primary rating from Vendor (eclipse).
CVSS VectorVendor: eclipse
Lifecycle Timeline
3DescriptionCVE.org
In Eclipse Milo versions 1.0.0 through 1.1.4, monitored-item quota accounting is not exception-safe: if item creation fails with an unchecked error, the server-global reservation is not restored. Deeply nested PubSub ExtensionObjects in a CreateMonitoredItems event filter can trigger a StackOverflowError during decoding, allowing an unauthenticated remote client to exhaust a finite global monitored-item quota and prevent all clients from creating new monitored items until restart. Existing monitored items and other server functions remain unaffected.
AnalysisAI
Unauthenticated remote clients can permanently exhaust the global monitored-item quota in Eclipse Milo OPC UA SDK versions 1.0.0 through 1.1.4, effectively preventing all clients from creating new monitored items until the server is restarted. The attack combines two defects: the server's ExtensionObject decoder lacks recursion-depth enforcement, enabling deeply nested PubSub structures in a CreateMonitoredItems event filter to trigger a JVM StackOverflowError, and the quota accounting code is not exception-safe against unchecked JVM Errors, so the reserved slot is never reclaimed. No public exploit code has been identified and this CVE is absent from the CISA KEV catalog; however, the CVSS 4.0 vector AV:N/AC:L/PR:N/UI:N confirms the attack is network-reachable with no authentication or complexity barriers.
Technical ContextAI
Eclipse Milo is an open-source OPC UA (IEC 62541) SDK for Java maintained by the Eclipse Foundation, used in industrial automation, SCADA, and IIoT deployments. The vulnerability arises from two interacting defects in the opc-ua-stack module. First, the ExtensionObject.decode() method in org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject had no recursion-depth guard: arbitrarily nested ExtensionObjects supplied in PubSub event filters would recurse through the Java call stack until a StackOverflowError was thrown - a subclass of java.lang.Error, not Exception. Second, the server's monitored-item quota accounting code did not handle unchecked Errors in its cleanup path (CWE-460: Improper Cleanup on Thrown Exception), so the StackOverflowError escaped without restoring the reserved quota slot. The upstream fix (commit 587e3566) introduces a ThreadLocal integer depth counter in ExtensionObject, checked against context.getEncodingLimits().getMaxRecursionDepth() before each decode call, converting uncontrolled recursion into a catchable UaSerializationException with status Bad_EncodingLimitsExceeded. A companion commit (5f3f6da2) addresses the exception-safe quota restoration. The CPE cpe:2.3:a:eclipse_foundation:eclipse_milo:*:*:*:*:*:*:*:* covers all versions; the stated range is 1.0.0 through 1.1.4.
RemediationAI
Upgrade Eclipse Milo by incorporating the two upstream fix commits: 587e35669f519b2d7f6d850a5f86ee5a76c3a2c5 (recursion-depth guard in ExtensionObject) and 5f3f6da2a5ea80682e1da7c58f7a1870b09d2b43 (exception-safe quota accounting), available at https://github.com/eclipse-milo/milo/commit/587e35669f519b2d7f6d850a5f86ee5a76c3a2c5 and https://github.com/eclipse-milo/milo/commit/5f3f6da2a5ea80682e1da7c58f7a1870b09d2b43. The first tagged release version incorporating these fixes is not confirmed in the available data - consult the Eclipse Milo GitHub releases page and the advisory at https://gitlab.eclipse.org/security/vulnerability-reports/-/work_items/598 to identify the patched release before upgrading. As a compensating control prior to patching, restrict network access to the OPC UA endpoint (default TCP port 4840) to known, trusted client hosts using firewall rules or network segmentation; this reduces exposure but does not eliminate risk from compromised trusted hosts. If the deployed version exposes a configurable EncodingLimits.maxRecursionDepth parameter, setting a low value (e.g., 4-8) limits the stack depth achievable during decoding and may prevent StackOverflowError, though this is not a full fix for the non-exception-safe quota accounting. Note that quota recovery after exploitation requires a server restart.
More in Eclipse Milo
View allPassword recovery in Eclipse Milo (the open-source OPC UA SDK for Java) versions 0.6.0 through 1.1.4 allows an on-path a
Silent authorization bypass in Eclipse Milo OPC UA server SDK versions 1.0.0-1.1.4 allows anonymous network clients to i
Unauthenticated remote denial-of-service in Eclipse Milo 0.6.0-1.1.4 allows any network-accessible client to exhaust the
Authorization bypass in Eclipse Milo's OPC UA Call service (versions 1.0.0-1.1.4) permits unauthenticated or low-privile
Session security diagnostics nodes in Eclipse Milo 0.6.0 through 1.1.4 expose sensitive OPC UA session metadata without
Same weakness CWE-460 – Improper Cleanup on Thrown Exception
View allSame technique Buffer Overflow
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-52659
GHSA-54cr-fx8f-gpc5