TroutTrout
Back to Blog
ICS AdvisoriesOT SecurityOPC UANetwork SecurityCritical Infrastructure

Eclipse Milo OPC UA Flaws: Find Where It Is Embedded, Then Limit Who Reaches It (ICSA-26-288-01)

Trout Team10 min read

The short version.

On October 15, 2026, CISA published ICSA-26-288-01 for Eclipse Milo, the open-source Java OPC UA SDK. It covers six CVEs in Milo 0.6.0 to 1.1.4. The highest scores are CVSS v3.1 8.2 and CVSS v4.0 9.1. Every CVSS v3.1 vector is network access, no privileges, no user interaction.

You probably do not run Milo directly. A product you run may embed it. Milo is the OPC UA server or client inside Java-based gateways, historians, edge connectors and IIoT platforms. The flaws let a client run methods it should be denied, delete protected data, read other users' session details, recover a password and crash the server.

The fix is Milo 1.1.5 or later. There is no 0.6.x patch: products on that branch must migrate. Until your vendors ship an update, keep each OPC UA endpoint reachable only from the clients that need it, and turn off anonymous access where the product allows.

Why an OPC UA SDK matters.

OPC UA is how much of the plant's data moves between machines and software. A PLC gateway publishes tags, a historian subscribes to them, an HMI or MES reads them and sometimes calls methods that act on equipment.

Few vendors write that protocol stack themselves. They build on an SDK. Milo is one of the established open-source choices for Java, so a single flaw in it travels into every product built on the affected versions, under each vendor's own name.

That is why an advisory about a library is harder to act on than one about a device. Your asset list says "data gateway" or "historian", not "Milo 1.0.3". The first job is finding out where it sits. Vendor bulletins help: Inductive Automation's Trust Center lists CVE-2026-63252 in its Ignition bulletin, fixed in Ignition 8.1.55 and 8.3.9 (see our post on ICSA-26-286-01).

What the advisory says.

  • Product: Eclipse Milo, versions 0.6.0 to 1.1.4. Three CVEs affect only 1.0.0 to 1.1.4.
  • Fix: Milo 1.1.5 or later. No 0.6.x release contains the fixes.
  • Sectors: Chemical, Critical Manufacturing, Energy, Water and Wastewater. Deployed worldwide. Eclipse Foundation headquarters: Belgium.
  • Reported by: Abhinav Agarwal.
CVECVSS v3.1CVSS v4.0What it allows, per the advisoryAffected
CVE-2026-580808.28.8A configured role mapper is dropped when the server configuration is copied, so role checks are skipped. Where anonymous sessions are permitted, an anonymous client can read role metadata, invoke protected methods and delete nodes (CWE-862)1.0.0 to 1.1.4
CVE-2026-629277.58.7Authorization is checked, then the original mixed batch is dispatched, so a denied method batched with an allowed one runs (CWE-863)1.0.0 to 1.1.4
CVE-2026-632527.58.7Partial message chunks are not released when a channel disconnects, so repeated incomplete chunks exhaust memory and can crash the server (CWE-401)0.6.0 to 1.1.4
CVE-2026-600077.49.1Distinguishable errors on username-token padding form a padding oracle that recovers a password from a captured encrypted token (CWE-204)0.6.0 to 1.1.4
CVE-2026-632486.56.9Diagnostics nodes lack access checks, exposing other sessions' usernames, login history and client certificates. An anonymous client can enable diagnostics over a None/None endpoint (CWE-862)0.6.0 to 1.1.4
CVE-2026-613875.36.9Monitored-item quota is not restored after a failed creation, so new monitored items are blocked until restart (CWE-772)1.0.0 to 1.1.4

Read the padding-oracle row closely. It scores 9.1 in v4.0, but the attacker must sit on the network path and capture an encrypted username token first. Its v3.1 vector marks attack complexity as high. All six descriptions concern Milo's server components, so ask your vendor whether the product runs a Milo server, not only whether it ships the library.

How the flaws chain together.

The anonymous endpoint is the way in. Many OPC UA servers accept anonymous sessions or a None/None endpoint for convenience during commissioning. Where they do, CVE-2026-63248 shows who else is connected: usernames, login history, certificates.

Then the role model stops holding. If the product copies its server configuration, CVE-2026-58080 drops the role mapper and an anonymous session can call protected methods and delete nodes. Even where roles hold, CVE-2026-62927 lets a client slip a denied method into a batch with an allowed one.

A named account can be taken too. An attacker on the path between a legitimate client and the server can capture the encrypted username token and use the padding oracle in CVE-2026-60007 to recover the password, then sign in as that user.

Or the server can simply be stopped. CVE-2026-63252 exhausts memory with incomplete message chunks. CVE-2026-61387 fills the monitored-item quota until restart. When the OPC UA server goes down, every HMI, historian and MES that reads through it goes blind.

The table maps the flaws to MITRE ATT&CK for ICS. It describes what the flaws allow, not an observed attack. It uses ATT&CK v20, released October 13, 2026, where Unauthorized Command Message moved to a new ID, shown with the old one.

TacticTechnique (ID)How it applies here
Initial AccessExploit Public-Facing Application (T0819)Conditional: an OPC UA endpoint reachable from the business network or the internet, with no privileges needed
DiscoveryRemote System Information Discovery (T0888)Diagnostics nodes expose other sessions' usernames, login history and certificates, CVE-2026-63248
ExecutionExecution through API (T0871)Calling methods the client's role should deny, CVE-2026-62927 and CVE-2026-58080
Impair Process ControlUnauthorized Message: Command Message (T1692.001, formerly T0855)Possible consequence: where a protected method acts on equipment behind the gateway
CollectionAdversary-in-the-Middle (T0830)Capturing an encrypted username token on the path, a precondition of CVE-2026-60007
Persistence, Lateral MovementValid Accounts (T0859)Signing in with the password recovered by the padding oracle
Inhibit Response FunctionData Destruction (T0809)Deleting nodes and protected data, CVE-2026-58080
Inhibit Response FunctionDenial of Service (T0814)Memory exhaustion and quota exhaustion, CVE-2026-63252 and CVE-2026-61387
ImpactLoss of View (T0829)Possible consequence: HMIs and historians lose their data while the server is down

What to do before and after the update.

Find every product that embeds Milo. Ask each vendor of a Java-based OPC UA server, gateway, historian or edge connector whether it uses Milo, which version, and when a build with 1.1.5 ships. Ask for the software bill of materials. On the hosts, search installation folders for Java archives such as sdk-server, stack-server or stack-core with a version in the file name, or any archive containing the org.eclipse.milo package. Milo 1.1.5 was published on GitHub on July 16, 2026, so some vendors may already have an update.

Treat 0.6.x as a migration, not a patch. A product built on Milo 0.6 needs its vendor to move to 1.1.5 or later. That can take longer than a normal update. Plan the containment to last until then.

Turn off anonymous access and None/None endpoints where the product allows it, and require signed and encrypted security modes. Your own code is in scope too: if your team built an OPC UA server on Milo, upgrade it and check how it copies its server configuration.

Decide who needs each endpoint. A historian, one SCADA server, one MES connector. Nobody else needs to open a session. CISA also asks you to keep control system devices off the internet, put them behind firewalls away from the business network, and use a secure method such as a VPN when remote access is needed.

How Access Gate helps, and its limits.

Two panels. Today: any host that reaches an OPC UA server built on Eclipse Milo can open an anonymous session, call methods, read diagnostics or exhaust memory. With Access Gate: only the named historian and SCADA clients reach the OPC UA port, everyone else has no route.
Who can reach a Milo-based OPC UA endpoint today, and with a gate while the vendor update is pending.

Access Gate is an appliance installed at each site. It connects to your existing network, beside it. You then steer the traffic to the OPC UA servers through it, one server or one subnet at a time. Nothing is installed on the gateway or historian. It is installed in a day per site.

Once the traffic flows through the gate, four documented features do the work.

A per-machine rule decides who reaches the endpoint. Access control lists are default deny. One rule allows the historian to reach the OPC UA server on its port, 4840 by default, or the port in the endpoint URL. Another allows the SCADA server. Every other host gets no route to the endpoint, which keeps anonymous sessions, the memory exhaustion and the quota exhaustion out of reach of the rest of the network.

A named person signs in first. When an engineer needs a browsing client against the server, an access screen asks them to log in with their own directory account before their workstation reaches it. Access expires after a preset timeout.

Admin sessions on the host are recorded. With privileged access management, the person who updates the gateway or historian opens RDP or SSH to its host in a browser session tied to their name, time-limited and recorded.

Every rule change is kept. The enclave change history records who changed which rule and when. If you run many OPC UA servers across plants, those rule changes can be driven from your LLM on Access Gate Performance.

The limits are real. Access Gate controls who reaches the endpoint and on which port. It does not read OPC UA messages. An allowed client can still send the malicious batch Call or exhaust the server's memory, so a compromised historian remains a risk. Milo 1.1.5 is still the fix. For the padding oracle, the gate shortens the list of hosts that can sit on the path to the server, but an attacker already on that path is outside its control. Anonymous access is turned off in the product, not in the gate.

For the wider design, see OT network security, OT identity, secure remote access and our guide to securing OPC UA. For how OPC UA carries plant data in the first place, see real-time PLC data streaming with OPC UA and Modbus.

What to do this week.

  1. List every Java-based OPC UA server, gateway, historian and edge connector, with its vendor and version.
  2. Ask each vendor whether it embeds Eclipse Milo, which version, and when a release with 1.1.5 ships.
  3. Search the hosts for Milo archives such as sdk-server or stack-core and note the version.
  4. Flag every 0.6.x product as a migration and plan containment that lasts until it is done.
  5. Turn off anonymous access and None/None endpoints where the product allows it.
  6. Test who can reach each OPC UA port from the corporate network and from the internet.
  7. Restrict each endpoint to the named clients that need it.

Want to see where a gate would sit at your plant? Build your network in a few minutes. Every other advisory we have covered is in the ICS security advisories archive.


Sources: CISA ICS Advisory ICSA-26-288-01 (October 15, 2026); the Eclipse Milo 1.1.5 release notes on GitHub (July 16, 2026); the CISA Known Exploited Vulnerabilities catalog, checked October 15, 2026; and MITRE ATT&CK for ICS v20. Confirm whether a product embeds Milo, and which version, with its vendor before changing a production server.

FAQ

Frequently Asked Questions

What is CISA advisory ICSA-26-288-01?
It is an ICS advisory CISA published on October 15, 2026 for Eclipse Milo, the open-source Java OPC UA SDK maintained under the Eclipse Foundation. It covers six CVEs in Milo 0.6.0 to 1.1.4, some of them only in 1.0.0 to 1.1.4. The highest scores are CVSS v3.1 8.2 and CVSS v4.0 9.1. CISA lists the Chemical, Critical Manufacturing, Energy, and Water and Wastewater sectors, with worldwide deployment.
Which Eclipse Milo version fixes the vulnerabilities?
Milo 1.1.5 or later. The Eclipse Milo project published 1.1.5 on GitHub on July 16, 2026. There is no fixed 0.6.x release, so products built on the 0.6 branch must migrate to 1.1.5 or later. If you run a vendor product that embeds Milo, the fix arrives as an update of that product, not as a library you swap yourself.
How do I know if a product I run uses Eclipse Milo?
Ask the vendor, and check its software bill of materials for the org.eclipse.milo components. On the host, look in the product's installation folders for Java archives such as sdk-server, stack-server or stack-core with a version number in the file name. Any Java-based OPC UA server, gateway, historian or edge connector is a candidate worth checking.
What can an attacker do with the Eclipse Milo vulnerabilities?
According to the advisory, delete protected data, recover user credentials and impersonate legitimate users, or make the server stop responding. Specific flaws let a client run a denied method by batching it with an allowed one, read other sessions' usernames and certificates through diagnostics, and exhaust memory or monitored-item quotas. All six have a CVSS v3.1 vector with network access and no privileges.
Are the Eclipse Milo vulnerabilities being exploited?
None of the six CVEs was in the CISA Known Exploited Vulnerabilities catalog when we checked on October 15, 2026, against catalog version 2026.10.15. The advisory does not report exploitation. Check the catalog again before you set the priority of the update.
Does disabling anonymous access in OPC UA fix the Milo flaws?
It reduces them but does not fix them. Two of the flaws are described for anonymous sessions where the server permits them, and the diagnostics flaw for a None/None endpoint, so turning those off where the product allows closes the easiest path. A signed-in client can still abuse the batch Call flaw or exhaust memory. Milo 1.1.5 is the fix.

Other Articles

ICS AdvisoriesOT Security

Inductive Automation Ignition: A Vision Login Can Become Designer Access (ICSA-26-286-01)

CISA's ICSA-26-286-01 covers CVE-2026-92817 in Inductive Automation Ignition 8.1.0 to 8.1.54 and 8.3.0 to 8.3.8. An authenticated user with access to a Vision project can reuse a valid Vision session to gain Designer-level privileges, which can lead to code execution in the Ignition Gateway process. The fix is 8.1.55 or 8.3.9, then separate operator access from Designer access by person and by machine.

OT SecurityFirewalls

How to manage OT firewall rules at scale with your LLM and Access Gate

Firewall rules written one by one, plant by plant, take weeks and drift. Security vendors are moving to AI agents. On a control network you want the enforcement on the wire and a human approving every write. This is how that works with Access Gate.

ICS AdvisoriesPower Grid

openPDC and openHistorian Flaws: Patch, Then Gate the Historian (ICSA-26-281-02)

CISA's ICSA-26-281-02 covers six CVEs in Grid Protection Alliance openPDC and openHistorian, the open-source phasor data concentrator and historian used by utilities. The worst, CVSS 9.8, lets an unauthenticated attacker run code through the service console. Patches exist, but upgraded installs keep their old network bindings and the Docker image gets no fix, so the second job is to control who can reach the server.