Description
OpenPLC Runtime v3 contains an authenticated arbitrary file write
vulnerability in the legacy web UI program‑upload workflow. The
application stores an attacker‑supplied filename (prog_file) directly
into the Programs.File database field and later uses this value as the
destination path for an uploaded file without validating or restricting
the path. Because Python os.path.join() honors attacker‑controlled
absolute paths, an authenticated user can write arbitrary files anywhere
writable by the OpenPLC webserver process. In the default build
pipeline, all C++ source files within the OpenPLC runtime core directory
are automatically compiled into the executable runtime binary. By
writing a malicious .cpp file into this directory, an authenticated
attacker can escalate the arbitrary file write into arbitrary native
code execution when the operator triggers a normal program compilation
and runtime start.
Published: 2026-07-10
Score: 8.7 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

OpenPLC Runtime v3 enables authenticated users to upload files through a legacy web UI program‑upload interface. During upload the supplied filename (prog_file) is stored directly in a database field and later concatenated into a filesystem path without validation. Because Python os.path.join() respects absolute paths, an attacker can direct the upload to any location writable by the webserver process. After uploading a malicious C++ source file into the runtime core directory, normal operation of the PLC will compile that file into the executable binary, enabling arbitrary native code execution. This flaw is a CWE‑73 arbitrary file name or path manipulation that can compromise the confidentiality, integrity, or availability of the PLC host.

Affected Systems

The vulnerability affects all OpenPLC Runtime v3 deployments that still expose the legacy program‑upload endpoint. All versions of OpenPLC v3 that include this UI component are susceptible; the description does not distinguish by minor release. OpenPLC v3 is no longer receiving security updates and the vendor recommends moving to OpenPLC v4, which removes the vulnerable upload workflow.

Risk and Exploitability

The CVSS score of 8.7 classifies this as a high‑severity vulnerability. The EPSS score of less than 1% indicates a low likelihood of exploitation, and the flaw is not currently listed in CISA’s KEV catalog. Exploitation requires authentication via the web UI; once logged in, an actor can write files to arbitrary locations and trigger compilation of malicious source code, leading to full remote code execution on the PLC host. Operators who maintain legacy OpenPLC v3 installations without patching remain at elevated risk.

Generated by OpenCVE AI on July 29, 2026 at 09:35 UTC.

Remediation

Vendor Solution

OpenPLC recommends users upgrade to OpenPLC v4 as OpenPLC v3 is end-of-life and is no longer receiving patches, bug fixes, or security updates.


OpenCVE Recommended Actions

  • Upgrade immediately to OpenPLC v4, which removes the vulnerable upload workflow.
  • If upgrade is not possible, restrict file‑write permissions of the webserver, enforce that uploaded filenames are relative paths only, and reject any path containing absolute components or traversal sequences.
  • Disable the legacy program‑upload endpoint entirely or relocate the runtime core directory to a location not writable by the webserver process, preventing compilation of attacker‑supplied source files.

Generated by OpenCVE AI on July 29, 2026 at 09:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 14 Jul 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Fri, 10 Jul 2026 23:45:00 +0000

Type Values Removed Values Added
First Time appeared Openplc
Openplc openplc
Vendors & Products Openplc
Openplc openplc

Fri, 10 Jul 2026 22:45:00 +0000

Type Values Removed Values Added
Description OpenPLC Runtime v3 contains an authenticated arbitrary file write vulnerability in the legacy web UI program‑upload workflow. The application stores an attacker‑supplied filename (prog_file) directly into the Programs.File database field and later uses this value as the destination path for an uploaded file without validating or restricting the path. Because Python os.path.join() honors attacker‑controlled absolute paths, an authenticated user can write arbitrary files anywhere writable by the OpenPLC webserver process. In the default build pipeline, all C++ source files within the OpenPLC runtime core directory are automatically compiled into the executable runtime binary. By writing a malicious .cpp file into this directory, an authenticated attacker can escalate the arbitrary file write into arbitrary native code execution when the operator triggers a normal program compilation and runtime start.
Title OpenPLC v3 External Control of File Name or Path
Weaknesses CWE-73
References
Metrics cvssV3_1

{'score': 9.9, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H'}

cvssV4_0

{'score': 8.7, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: icscert

Published:

Updated: 2026-07-13T15:41:57.195Z

Reserved: 2026-07-02T16:00:30.030Z

Link: CVE-2026-14480

cve-icon Vulnrichment

Updated: 2026-07-13T15:41:51.949Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-29T09:45:04Z

Weaknesses
  • CWE-73

    External Control of File Name or Path