Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain on-path position on OT network
-
DeliveryIntercept OPC UA GetEndpoints/handshake
-
ExploitSubstitute attacker server certificate
-
ExecutionClient encrypts credentials to attacker
-
ImpactForge signatures and modify secure-channel traffic
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
|
| Exploitation Conditions | Requires the application to use the OPC UA driver of Apache PLC4X (PLC4J) at versions 0.9.0 through 0.13.1, and the attacker must hold a man-in-the-middle network position between the OPC UA client and server (the AT:P attack requirement). Exploitation is aided by insecure defaults rather than misconfiguration: the default security policy is None across all affected versions; from 0.12.0 the driver silently downgrades to a weaker-than-configured security policy; and from 0.13.0 endpoint selection prefers the weakest matching endpoint. Critically, even operators who explicitly enabled signing/encryption remain exposed because 0.9.0-0.11.0 only log failed signature checks while 0.12.0-0.13.1 invert the check (rejecting valid, accepting invalid) and accept server certificates with no trust anchor. The limiting factors are the required on-path position and that the fully-fixed behavior only exists in 1.0.0. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H) scores 9.2 (Critical), reflecting an unauthenticated network attacker who can fully compromise confidentiality, integrity and availability of the OPC UA secure channel. The single meaningful brake is AT:P - the attacker must already hold a man-in-the-middle position between the PLC4X client and the OPC UA server, which is a real precondition rather than a trivial one. No EPSS score, no CISA KEV listing, and no public exploit code were supplied, so exploitation status is: no public exploit identified at time of analysis. This is a genuine priority for OT/ICS environments despite the missing exploitation telemetry, because the flaw defeats exactly the cryptographic protections operators believe they have enabled and directly harvests user credentials; the version-dependent behavior (inverted signature check in 0.12.0-0.13.1) is particularly insidious because it silently converts a security control into an anti-control. The residual limiter is the on-path requirement - on a flat, unauthenticated OT segment (common for PLC traffic) that requirement is weak, but across routed/segmented networks it is a substantial barrier. Reported by Apache directly, so the affected-version range and fix are authoritative. |
| Exploit ScenarioDerived | An attacker who has gained a foothold on the OT/industrial LAN carrying PLC4X-to-OPC-UA traffic (e.g., via ARP spoofing or a compromised switch) positions themselves between the PLC4J client and the OPC UA server. They intercept the unauthenticated GetEndpoints discovery response and substitute their own certificate, so the client encrypts the operator password to the attacker; forged or invalid message signatures are either only logged (0.9.0-0.11.0) or actively accepted (0.12.0-0.13.1), letting the attacker impersonate the server and read, forge, or modify secure-channel traffic. No public proof-of-concept is identified, but the attack requires only a standard on-path toolkit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 30, 2026
Man-in-the-middle attackers can impersonate the OPC UA server to Apache PLC4X (PLC4J) client applications and read, forge or modify secure-channel traffic - including the user credentials the client sends - affecting versions 0.9.0 through 0.13.1, with the fix landing in 1.0.0. Unauthenticated network attackers holding an on-path position (the AT:P requirement) benefit from insecure defaults: the security policy defaults to None in every affected release, 0.9.0-0.11.0 only log failed message-signature checks and never verify the server certificate taken from the unauthenticated GetEndpoints response, while 0.12.0-0.13.1 invert the signature check (rejecting valid signatures and accepting invalid ones) and accept server certificates with no trust anchor; from 0.12.0 the driver also silently continues at a weaker policy than configured, and from 0.13.0 endpoint selection prefers the weakest matching endpoint. Rated 9.2 (Critical) under CVSS 4.0 and high-severity under the independent CVSS 3.1 assessment (AV:N/AC:H/PR:N/UI:N/C:H/I:H/A:H); no public exploit code identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade Apache PLC4X to 1.0.0, which verifies message signatures correctly, refuses to connect unless the server certificate validates against a configured trust store or a pinned certificate, defaults to Basic256Sha256 with SignAndEncrypt, and aborts the connection when the negotiated security policy is weaker than the one configured. Deployments still on 0.9.0-0.11.0 cannot be made safe by enabling signing or encryption, because failed signature checks are only logged and the server certificate is never validated; versions 0.12.0-0.13.1 are likewise unreliable because the signature check is inverted, so upgrading is the only complete fix - see the advisory at https://lists.apache.org/thread.html/o076mcnsx6wnqpdy780m7s6hddbbnjfw. If immediate upgrade is impossible, compensating controls are limited and should be treated as risk reduction rather than a fix: explicitly configure a security policy and pin the expected server certificate so at least one verification path is enforced (partially effective only on 0.12.0-0.13.1, ineffective on 0.9.0-0.11.0, and it breaks connections if the server certificate rotates without updating the pin); explicitly set the endpoint and security policy rather than relying on discovery or automatic selection, since 0.13.0 prefers the weakest matching endpoint (side effect: legitimate servers offering only weaker endpoints will fail to connect); confine OPC UA traffic to a trusted, segmented network or tunnel it over a mutually authenticated transport such as TLS/IPsec or an SSH tunnel so an on-path attacker cannot reach the channel (this adds infrastructure and latency and does not protect traffic that is already exposed on flat industrial networks); and monitor client logs for signature-check failures, policy-downgrade notices, or unexpected GetEndpoints responses, while remembering that on 0.9.0-0.11.0 these events are logged without blocking the connection and should be treated as evidence of possible compromise requiring credential rotation.
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
OPC UA is an industrial machine-to-machine protocol whose SecureChannel and Session layers rely on X.509 server certificates, trust anchors and application-message signatures to give clients confidentiality, integrity and server authentication. Apache PLC4X is a library for industrial protocols (PLC4J is the Java binding) and its OPC UA driver implements the client side of that handshake. The defect is rooted in CWE-347 (Improper Verification of Cryptographic Signature), compounded by improper certificate validation: in 0.9.0-0.11.0 a failed signature check is only written to the log rather than terminating the connection, and no mechanism exists to validate the server certificate, which is instead lifted from the unauthenticated GetEndpoints discovery response and then used to encrypt the user's password. In 0.12.0-0.13.1 the verification logic is inverted so valid signatures are rejected and invalid ones accepted, and certificates are accepted without a trust anchor. Across all affected releases the default security policy is None (no signing or encryption), 0.12.0 adds a silent downgrade to a policy weaker than the one configured, and 0.13.0 makes endpoint selection prefer the weakest matching endpoint. The CPE cpe:2.3:a:apache_software_foundation:apache_plc4x identifies the affected package. Because each version family fails in a different mechanism, an operator who confirms only one control (for example, that signing is configured) can wrongly conclude they are protected.
Know when Apache Plc4X 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
AC:H reflects the required man-in-the-middle on-path position; PR:N/UI:N as no auth or victim interaction is needed; C:H/I:H/A:H for credential theft plus forging and modifying control traffic.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
Lifecycle Timeline
2DescriptionCVE.org
Improper Verification of Cryptographic Signature and Improper Certificate Validation in the OPC UA driver of Apache PLC4X (PLC4J) allows an attacker in a network position between client and server to impersonate the OPC UA server and to read, forge or modify secure-channel traffic, including user credential ssent by the client.
The defect manifests differently depending on the version:
- In 0.9.0 through 0.11.0 a failed message-signature check is only logged and never enforced, and there is no mechanism to verify the server certificate: it is taken from the unauthenticated GetEndpoints discovery response and used to encrypt the user's password.
- In 0.12.0 through 0.13.1 the signature check is inverted (valid signatures are rejected, invalid ones accepted), and server certificates are accepted without a trust anchor by default.
- In all affected versions the default security policy is None. Starting with 0.12.0 the driver additionally continues silently at a weaker security policy than the one configured, and starting with 0.13.0 endpoint selection prefers the weakest matching endpoint.
Users checking only for one of these mechanisms may wrongly conclude they are unaffected.
This issue affects Apache PLC4X: from 0.9.0 before 1.0.0.
Users are recommended to upgrade to version 1.0.0, which fixes the issue. Version 1.0.0 verifies message signatures correctly, refuses to connect unless the server certificate can be verified against a configured trust store or pinned certificate, defaults to Basic256Sha256 with SignAndEncrypt, and fails the connection if the negotiated security policy is weaker than the configured one.
Articles & Coverage 1
Executive ViewAI
Apache PLC4X (PLC4J) client libraries, versions 0.9.0 through 0.13.1, can be impersonated by an attacker who holds a position on the network path, allowing that attacker to read, forge or alter OPC UA secure-channel traffic, including the user credentials the client sends to the server. Any organization using these libraries to bridge industrial control systems with monitoring or business applications should treat affected deployments as a credential-exposure and data-integrity risk that reaches both OT operations and the enterprise systems they feed. Because the libraries do not verify server identity securely by default, leadership should plan on a version upgrade to 1.0.0 rather than assuming a configuration change will close the gap.
No vendor-released patch identified at time of analysis. Interim mitigations: deny untrusted hosts any on-path position between PLC4J clients and OPC UA servers (dedicated VLANs/segments, IPsec or encrypted tunnels, strict ingress and egress filtering); rotate credentials, session secrets and certificates used by affected clients as they must be assumed exposed; enable centralized logging of OPC UA session and certificate-validation errors and alert on unexpected server endpoints; pin server certificates and enforce Basic256Sha256 or stronger policies where the release honours them, but do not treat configuration as remediation, because 0.12.0-0.13.1 can silently continue at a weaker policy than configured and endpoint selection can prefer the weakest matching endpoint; validate and deploy 1.0.0 as soon as the vendor confirms availability.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Apache Plc4X
View allMemory exhaustion and parser panics in the Go implementation of Apache PLC4X (PLC4Go) allow a malicious PLC device, or a
Denial of service in Apache PLC4X (PLC4J Java) from 0.10.0 before 1.0.0 allows a remote, unauthenticated attacker who ca
Improper verification of the source of ADS discovery responses in Apache PLC4X (CWE-940) allows an attacker on the adjac
EUVD-2026-89674
GHSA-f4cq-mfh7-4385
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB