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.
| CVE | CVSS v3.1 | CVSS v4.0 | What it allows, per the advisory | Affected |
|---|---|---|---|---|
| CVE-2026-58080 | 8.2 | 8.8 | A 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-62927 | 7.5 | 8.7 | Authorization 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-63252 | 7.5 | 8.7 | Partial 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-60007 | 7.4 | 9.1 | Distinguishable 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-63248 | 6.5 | 6.9 | Diagnostics 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-61387 | 5.3 | 6.9 | Monitored-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.
| Tactic | Technique (ID) | How it applies here |
|---|---|---|
| Initial Access | Exploit Public-Facing Application (T0819) | Conditional: an OPC UA endpoint reachable from the business network or the internet, with no privileges needed |
| Discovery | Remote System Information Discovery (T0888) | Diagnostics nodes expose other sessions' usernames, login history and certificates, CVE-2026-63248 |
| Execution | Execution through API (T0871) | Calling methods the client's role should deny, CVE-2026-62927 and CVE-2026-58080 |
| Impair Process Control | Unauthorized Message: Command Message (T1692.001, formerly T0855) | Possible consequence: where a protected method acts on equipment behind the gateway |
| Collection | Adversary-in-the-Middle (T0830) | Capturing an encrypted username token on the path, a precondition of CVE-2026-60007 |
| Persistence, Lateral Movement | Valid Accounts (T0859) | Signing in with the password recovered by the padding oracle |
| Inhibit Response Function | Data Destruction (T0809) | Deleting nodes and protected data, CVE-2026-58080 |
| Inhibit Response Function | Denial of Service (T0814) | Memory exhaustion and quota exhaustion, CVE-2026-63252 and CVE-2026-61387 |
| Impact | Loss 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.
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.
- List every Java-based OPC UA server, gateway, historian and edge connector, with its vendor and version.
- Ask each vendor whether it embeds Eclipse Milo, which version, and when a release with 1.1.5 ships.
- Search the hosts for Milo archives such as
sdk-serverorstack-coreand note the version. - Flag every 0.6.x product as a migration and plan containment that lasts until it is done.
- Turn off anonymous access and None/None endpoints where the product allows it.
- Test who can reach each OPC UA port from the corporate network and from the internet.
- 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.